无法为完全外连接的给定查询设计查询计划

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 BA 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 

【讨论】:

太棒了!我会试试这个。谢谢。

以上是关于无法为完全外连接的给定查询设计查询计划的主要内容,如果未能解决你的问题,请参考以下文章

将两个查询的左外连接转换为 LINQ

无法为 MS Access 数据库中的同一表查询编写左外连接

Sql 完全外连接查询在 SQLAlchemy 中不起作用

数据库表连接(内连接,外连接左连接右连接全连接交叉连接)

MySQL数据库多表查询

oracle中的全外连接