无法为完全外连接的给定查询设计查询计划
Posted
技术标签:
【中文标题】无法为完全外连接的给定查询设计查询计划【英文标题】:Could not devise a query plan for the given query for full outer join 【发布时间】:2020-04-07 14:34:36 【问题描述】:这个查询有什么问题? 我正在尝试在 Redshift 上执行给定的查询,但出现错误“无法获取查询计划”
我的查询是这样的:
(从 a1 中选择不同的 x,y,a2.z 全外连接 (select distinct z from a1) a2 on 1=1) ;
还有一件事,我可以使用交叉连接而不是完全外连接,因为我没有连接谓词或 where 子句。
【问题讨论】:
请选择一个服务器产品而不是 4 个。 如果任一输入为空,则交叉连接将不同 哦,实际上是因为它们都是a1
——所以不可能一侧为空而另一侧有行
那么,在这种情况下,交叉连接和完全外连接没有区别吗?对吗?
是的 - 在这种特定情况下,如果是 A CROSS JOIN B
和 A FULL JOIN B ON 1=1
,那么如果其中一个是空的,那么它们的行为会有所不同,但这不适用于这里
【参考方案1】:
我对 Amazon redshift 一无所知,但这与原始查询具有相同的语义,并且 IMO 更清晰,所以看看它是否可以为此制定计划
SELECT xy.x,
xy.y,
z.z
FROM (SELECT DISTINCT x,
y
FROM a1) xy
CROSS JOIN (SELECT DISTINCT z
FROM a1) z
【讨论】:
太棒了!我会试试这个。谢谢。以上是关于无法为完全外连接的给定查询设计查询计划的主要内容,如果未能解决你的问题,请参考以下文章