如何在Amazon Redshift中选择多行填充常量?

时间:2015-01-30 10:10:53

标签: sql postgresql amazon-redshift set-returning-functions

我已经尝试了常见的PostgreSQL答案,但似乎它不适用于Redshift:

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

ERROR: 42883: function values(integer) does not exist

我需要这个,因为出于某种原因我无法使用UNION ALL。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:14)

正确的Postgres语法是:

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

缺少一组括号 但似乎Redshift甚至不支持VALUES之外的INSERT表达式(就像现代的Postgres一样)。因此,对于单行

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

对于多行(不使用UNION ALL请求),您可以使用临时表。注意(per documentation):

  

会话结束时会自动删除临时表   它是在哪里创建的。

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;