【发布时间】:2016-11-14 09:30:13
【问题描述】:
我正在尝试使用包含子查询的查询来填充表。
格式如下:
INSERT INTO table_C
SELECT columns FROM table_A, table_B
子查询出现在 select 语句的某一列中,它再次引用“table_A”(table_A 和 table_B 之间存在连接)。
这是代码,但在阅读之前请考虑 select 语句如果单独运行(即没有 INSERT)完美运行:
INSERT INTO hypercube_2015 (date, hour, name, rel_val)
SELECT t1.date, t1.hour, t2.name,
CAST(sum(t1.num) as float)/(SELECT sum(t11.num) FROM hc_num t11 WHERE t11.date = t1.date AND t11.hour = t1.hour)
FROM hc_num t1, names t2
WHERE date between '2015-01-01' AND '2015-12-31'
AND t1.id = t2.id
GROUP BY t1.date, t1.hour, t2.name
问题与第 3 行中的子查询有关,特别是与 WHERE 条件有关。如果我将其更改为以下内容,则可以:
SELECT sum(t11.num) FROM hc_num t11 WHERE t11.date = '2015-01-01' AND t11.hour=0
错误消息是(我正在通过 DBVis 处理 Redshift 数据库):
[代码:500310,SQL 状态:XX000] 亚马逊无效操作: 不支持这种类型的相关子查询模式,因为 内部错误;
【问题讨论】:
-
由于 Redshift 是 PostgreSQL 的一个闭源分支,你或许应该问问亚马逊。一定是他们的一些代码。
标签: sql sql-insert amazon-redshift correlated-subquery