我有 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
这适用于前 2 个条件。但无法合并第三次连接。任何人都可以建议一种方法来实现这一点吗?
提前致谢。
您可以有多种变体,所有变体都具有不同的结果集。其中哪一个的初衷对于其他人来说是很难甚至不可能辨别的:
(变化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
如果替换第一个或第二个,则变体 3 可以有多个子变体LEFT
加入一个INNER
join.
我猜你想要变体 3a。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)