AFAIK libunwind довольно портативен, и до сих пор я не нашел ничего более легкого в использовании.
SELECT 1, 2, 3
UNION ALL SELECT 4, 5, 6
UNION ALL SELECT 7, 8, 9
В PostgreSQL
можно сделать:
SELECT *
FROM (
VALUES
(1, 2),
(3, 4)
) AS q (col1, col2)
В других системах просто используйте UNION ALL
:
SELECT 1 AS col1, 2 AS col2
-- FROM dual
-- uncomment the line above if in Oracle
UNION ALL
SELECT 3 AS col1, 3 AS col2
-- FROM dual
-- uncomment the line above if in Oracle
В Oracle
, SQL Server
и PostgreSQL
также можно генерировать наборы записей произвольного количества строк (возможно с помощью внешней переменной):
SELECT level
FROM dual
CONNECT BY
level <= :n
в Oracle
,
WITH q (l) AS
(
SELECT 1
UNION ALL
SELECT l + 1
FROM q
WHERE l < @n
)
SELECT l
FROM q
-- OPTION (MAXRECURSION 0)
-- uncomment line above if @n >= 100
в SQL Server
,
SELECT l
FROM generate_series(1, $n) l
в PostgreSQL
.