首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >INSERT语句中的关联子查询- PostgreSQL

INSERT语句中的关联子查询- PostgreSQL
EN

Stack Overflow用户
提问于 2016-07-12 08:37:41
回答 1查看 1.7K关注 0票数 0

我试图使用包含子查询的查询填充表。

格式如下:

代码语言:javascript
复制
INSERT INTO table_C 
SELECT columns FROM table_A, table_B

子查询出现在select语句的一个列中,它再次引用" table_A“(table_A和table_B之间有一个连接)。

下面是代码,但在阅读代码之前,请考虑一下,如果单独运行select语句(即不插入),则select语句可以很好地工作:

代码语言:javascript
复制
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条件。如果我将其更改为以下内容,它就能工作:

代码语言:javascript
复制
SELECT sum(t11.num) FROM hc_num t11 WHERE t11.date = '2015-01-01' AND t11.hour=0

错误消息是(我正在通过DBVis处理Redshift数据库):

代码: 500310,State: XX000亚马逊无效操作:由于内部错误,不支持这种关联子查询模式;

EN

回答 1

Stack Overflow用户

发布于 2016-07-12 09:06:48

我没有任何解决方案要提出,但有一个答案,解释为什么你有这个错误。

在RedShift上,有几种情况下,优化器无法解析相关的子查询并触发此错误。其中之一恰恰是你的疑问:

不支持的相关子查询模式 查询规划器使用名为子查询解相关的查询重写方法来优化多个相关子查询的模式,以便在MPP环境中执行。有几种类型的相关子查询遵循Amazon无法修饰和不支持的模式。包含以下相关引用的查询返回错误: 按列对相关子查询结果的引用。例如: 选择listing.listid,(从sales.listid=listing.listid的销售中选择count (sales.listid)作为上市组的列表,listing.listid;

来源:Amazon webservices服务相关子查询

在子查询中:

代码语言:javascript
复制
(SELECT sum(t11.num) FROM hc_num t11 WHERE t11.date = t1.date AND t11.hour = t1.hour)

您确实引用了t1.hour,它存在于最终的GROUP BY

代码语言:javascript
复制
GROUP BY t1.date, t1.hour, t2.name

请注意,如果没有其他人这样做,我稍后可能会更深入地查看您的查询,以便提出一个替代方案。现在没时间了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38323805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档