"On" 离开加入顺序
"On" left join order
我已经阅读了 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,因为翻转后它将充当内连接。
这是真的吗?
告诉您的人不了解 JOIN 和连接条件的工作原理。 He/She 是完全错误的。
表的顺序对左连接很重要。 a left join b
和b left join a
不同,但是join的顺序condition是没有意义的
A.ID = B.ID
是表连接的条件,returns TRUE
或 FALSE
。
由于 equality(=
) 是 commutative,因此操作数的顺序不影响结果。
它们完全不正确,证明起来很简单。
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 Left JOIN B 与 B LEFT JOIN A),如果使用 OR,连接条件组的顺序很重要(A=B OR A IS NULL AND A IS NOT NULL -始终在 OR 中使用括号),但在条件组中(例如 a.ID=b.ID)无关紧要。
我已经阅读了 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,因为翻转后它将充当内连接。
这是真的吗?
告诉您的人不了解 JOIN 和连接条件的工作原理。 He/She 是完全错误的。
表的顺序对左连接很重要。 a left join b
和b left join a
不同,但是join的顺序condition是没有意义的
A.ID = B.ID
是表连接的条件,returns TRUE
或 FALSE
。
由于 equality(=
) 是 commutative,因此操作数的顺序不影响结果。
它们完全不正确,证明起来很简单。
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 Left JOIN B 与 B LEFT JOIN A),如果使用 OR,连接条件组的顺序很重要(A=B OR A IS NULL AND A IS NOT NULL -始终在 OR 中使用括号),但在条件组中(例如 a.ID=b.ID)无关紧要。