我已经尝试了常见的PostgreSQL的方法,但似乎它在Redshift上不起作用:
SELECT * FROM VALUES (1) AS q (col1);
ERROR: 42883: function values(integer) does not exist
我需要这个是因为由于某些原因我不能使用 UNION ALL
。任何帮助将不胜感激。
我已经尝试了常见的PostgreSQL的方法,但似乎它在Redshift上不起作用:
SELECT * FROM VALUES (1) AS q (col1);
ERROR: 42883: function values(integer) does not exist
我需要这个是因为由于某些原因我不能使用 UNION ALL
。任何帮助将不胜感激。
正确的 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;