Как выбрать несколько строк, заполненных константами в Amazon Redshift?


Я уже пробовал обычный ответ PostgreSQL, но, похоже, он не работает с Redshift:

SELECT  * FROM VALUES (1) AS q (col1);

ERROR: 42883: function values(integer) does not exist
Мне это нужно, потому что по какой-то причине я не могу использовать UNION ALL. Любая помощь будет очень признательна.
1 6

1 ответ:

Правильный синтаксис Postgres был бы:

SELECT * FROM (VALUES (1)) AS q (col1);

Набор скобок отсутствовал.
Но похоже, что Redshift даже не поддерживает выражение VALUES вне INSERT (как это делает современный Постгрес). Итак, для одной строки :

SELECT * FROM (SELECT 1) AS q (col1);

Для нескольких строк (без использования UNION ALL как запрошено) можно использовать временную таблицу. Примечание (по документации):

Временная таблица автоматически удаляется в конце сеанса в который и был создан.

CREATE TEMP TABLE q(col1 int);
INSERT INTO q(col1)
VALUES (1), (2), (3);

SELECT  * FROM q;

Если UNION ALL был бы вариант:

SELECT 1 AS col1
UNION ALL SELECT 2
UNION ALL SELECT 3;