gpt4 book ai didi

SQL 多外部连接(将 t-sql 连接转换为 ANSI 格式)

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

我有 3 个表 t1、t2、t3。我想要一个基于这些条件的结果集:t1 在 t2 上有外部连接(t1 的所有行),t1 在 t3 上有外部连接(t1 的所有行)和 t2 在 t3 上有外部连接(t2 的所有行)。如何在单个查询中使用这些外部 3 连接?基本上我想将 t-sql 格式查询转换为 ANSI 格式。原来的查询是这样的

Select * from t1, t2, t3
where t1.col1 *= t2.col1
and t1.col2 *= t3.col1
and t2.col2 *= t3.col2

我设法将前 2 个连接用作

   Select * 
from t1
left join t2 on t1.col1 = t2.col1
left join t3 on t1.col2 = t3.col1

这适用于前两种情况。但是无法合并第三个连接。任何人都可以建议一种方法来完成这个吗?提前致谢。

最佳答案

您可以有多种变体,所有变体都具有不同的结果集。其他人很难甚至不可能分辨出其中哪一个是初衷:


(变体 1 - Tobsey 的查询,先连接到 t2,再连接到 t3,相当于:

SELECT 
*
FROM
t1
INNER JOIN --- or LEFT JOIN
t2
ON t1.col1 = t2.col1
LEFT JOIN
t3
ON t1.col2 = t3.col1
AND t2.col2 = t3.col2 --- this line makes the first LEFT join
--- equal to INNER join

(变体 2 - 首先连接到 t3,然后连接到 t2):

SELECT 
*
FROM
t1
INNER JOIN --- or LEFT JOIN
t3
ON t1.col2 = t3.col1
LEFT JOIN
t2
ON t1.col1 = t2.col1
AND t3.col2 = t2.col2

(变体 3a - 首先将 t2 连接到 t3,然后将 t1 连接到该连接):

SELECT 
*
FROM
t1
LEFT JOIN
t2
LEFT JOIN
t3
ON t2.col2 = t3.col2
ON t1.col1 = t2.col1
AND t1.col2 = t3.col1

如果您将第一个或第二个 LEFT 连接替换为 INNER 连接,则变体 3 可以有更多的子变体。

我猜你想要变体 3a。

关于SQL 多外部连接(将 t-sql 连接转换为 ANSI 格式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9501089/

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