【问题标题】:Order of keys in the LEFT JOIN conditionLEFT JOIN 条件中键的顺序
【发布时间】:2016-10-18 03:46:57
【问题描述】:

当我们在 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


【解决方案1】:

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

== 是可交换的,你可以切换参数:tableA.key = tableB.key 等价于tableB.key = tableA.key

【讨论】:

    【解决方案2】:

    你会得到同样的结果。 on 子句仅评估为真或假;顺序无关紧要。

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

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

    【讨论】:

      【解决方案3】:

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

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

      所以,当我们将TableB的记录添加到TableA中的查询时,我们需要指定TableB中必须有哪些记录才能满足TableA中的当前记录。所以我们必须说,我们需要来自 TableB 的记录,它们的 id 等于 TableA.ID。表 B.id = 表 A.id。我们必须完全按照这个顺序写,以便于阅读和理解这种关系。

      【讨论】:

      猜你喜欢
      • 2023-04-06
      • 2012-08-22
      • 2014-06-02
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多