一尘不染

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

sql

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

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

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

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


阅读 128

收藏
2021-05-16

共1个答案

一尘不染

正确的Postgres语法为:

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

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

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;
2021-05-16