LEFT JOIN 条件下的键顺序

问题描述 投票:0回答:3

当我们颠倒 LEFT JOIN 条件中键的顺序时会发生什么?

连接两个表的理想 SQL 左连接语法是

select fields 
from tableA 
LEFT JOIN tableB 
ON tableA.key = tableB.key

连接条件的顺序翻转

select fields 
from tableA 
LEFT JOIN tableB 
ON tableB.key = tableA.key  -- (order flipped)

这些查询会产生不同的结果集吗?

mysql join left-join
3个回答
6
投票

您将得到相同的结果。 on 子句仅计算 true 或 false;顺序并不重要。

只有桌子本身的位置很重要。例如如下颠倒表格顺序会产生不同的结果。

select fields 
from tableB 
LEFT JOIN tableA
ON tableA.key = tableB.key

2
投票

LEFT JOIN
不可交换,不能切换参数:
tableA LEFT JOIN tableB
等价于
tableB RIGHT JOIN tableA
,但与
tableB LEFT JOIN tableA
不同。

==
是可交换的,您 可以 切换参数:
tableA.key = tableB.key
相当于
tableB.key = tableA.key


1
投票

除了查询的可读性之外,没有任何区别。

SQL 被设计为像通常的英文文本一样可读。在通常的文本中,当我们想要指定任何提到的对象时,我们会说类似“一个对象。这个对象就像那个对象,这个对象与那个对象相关,并且这个对象具有这些属性。”我们不这样做说 “那个对象就像这个对象,与这个对象相关的那个对象,并且那些属性具有这个对象”

因此,当我们从 TableB 的记录中添加一条数据来查询 TableA 时,我们需要指定必须有 TableB 中的一条记录才能满足 TableA 中的当前记录。所以我们必须说,

我们需要 TableB 中的记录,它的 id 等于 TableA 中的 id。 TableB.id = TableA.id

。我们希望完全按照这个顺序编写,以确保易于阅读和理解这种关系。

© www.soinside.com 2019 - 2024. All rights reserved.