“开”左加入顺序

时间:2019-03-27 17:54:11

标签: sql outer-join

我已经阅读了20多个标题相似的帖子,但没有找到答案,所以如果有一个帖子,请提前道歉。

我一直相信

select * FROM A LEFT JOIN B on ON A.ID = B.ID

等于

select * FROM A LEFT JOIN B on ON B.ID = A.ID

但是今天被告知:“由于您有一个左连接,因此必须将其设置为A = B,因为将其翻转将充当内部连接。

对此有何道理?

3 个答案:

答案 0 :(得分:5)

谁告诉您不了解JOIN和联接条件如何工作。他/她是完全错误的。

的顺序对于左联接很重要。 a left join bb left join a不同,但是联接 condition 的顺序没有意义。

答案 1 :(得分:3)

A.ID = B.ID是连接表并返回TRUEFALSE的条件。
由于equity(=)为commutative,因此操作数的顺序不会影响结果。

答案 2 :(得分:1)

它们是完全不正确的,很难证明。

DECLARE @A TABLE (ID INT)
DECLARE @B TABLE (ID INT)

INSERT INTO @A(ID) SELECT 1
INSERT INTO @A(ID) SELECT 2

INSERT INTO @B(ID) SELECT 1

SELECT *
FROM @A a
LEFT JOIN @B b ON a.ID=b.ID

SELECT *
FROM @A a
LEFT JOIN @B b ON b.ID=a.ID

表的顺序很重要(A左连接B与B左连接A),如果使用OR,则连接条件组的顺序很重要(A = B OR A IS NULL和A IS NOT NULL-始终使用用OR括起来,但在条件组内(例如a.ID = b.ID)没关系。