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

21

我已经尝试了常见的PostgreSQL的方法,但似乎它在Redshift上不起作用:

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

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

我需要这个是因为由于某些原因我不能使用 UNION ALL。任何帮助将不胜感激。


1
我自己也遇到了这个问题。以下是关于哪些Postgres功能在Redshift中不受支持的文档:https://docs.aws.amazon.com/en_pv/redshift/latest/dg/c_unsupported-postgresql-features.html - stone
1个回答

40

正确的 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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接