gpt4 book ai didi

sql - Sql Server 中的交叉联接并不总是返回所有表中的所有行

转载 作者:行者123 更新时间:2023-12-01 18:48:42 26 4
gpt4 key购买 nike

有时,如果其中一个表没有任何行,交叉联接不会返回任何行

例如

WITH    q1
AS ( SELECT 1 AS V1
WHERE 0 <> 0
),
q2
AS ( SELECT 2 AS V2
)
SELECT *
FROM q1 ,
q2

我预计此查询将返回一行 V1 = null 且 V2 = 2但它不返回任何行

有什么解释吗?

最佳答案

交叉联接(笛卡尔积)返回两个表中行的每个组合。即一个表上的每一行都与另一侧的每一行配对。

这给出了 M * N 行,其中 M 是一侧的行数,N 是另一侧的行数。

乘以零返回零。

如果您想保留另一侧不匹配的行,则需要外连接。

WITH    q1
AS ( SELECT 1 AS V1
WHERE 0 <> 0
),
q2
AS ( SELECT 2 AS V2
)
SELECT *
FROM q1 RIGHT OUTER JOIN
q2 ON 1=1

(或FULL OUTER JOIN以从任一侧保留)

关于sql - Sql Server 中的交叉联接并不总是返回所有表中的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26339126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com