当我们在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)
这些查询会产生不同的结果吗?
答案 0 :(得分:2)
您将获得相同的结果。 on子句只是评估为true或false;订单无关紧要。
只有表格的位置才重要。例如如下所示的反转表顺序会产生不同的结果。
select fields
from tableB
LEFT JOIN tableA
ON tableA.key = tableB.key
答案 1 :(得分:1)
LEFT JOIN
不是可交换的,您无法切换参数:tableA LEFT JOIN tableB
相当于tableB RIGHT JOIN tableA
,与tableB LEFT JOIN tableA
不同。
==
是可交换的,您可以切换参数:tableA.key = tableB.key
相当于tableB.key = tableA.key
。
答案 2 :(得分:0)
除了查询的可读性之外,没有任何区别。
SQL被设计为像通常的英文文本一样可读。在通常的文本中,当我们要指定任何提及的对象时,我们说的是“一个对象。该对象类似于该对象,该对象与该对象相关,并且该对象具有那些属性”。我们不会说“该对象就像该对象,对于与该对象相关的那个对象,并且那些属性具有该对象”。
因此,当我们将TableB的记录添加到TableA的查询中时,我们需要指定必须具有TableB的记录才能满足TableA的当前记录的内容。因此我们必须说,我们需要来自TableB的记录,该记录的ID等于TableA.ID。 TableB.id = TableA.id。我们必须严格按此顺序编写,以方便阅读和理解这种关系。