【问题标题】:In which order joins execute in mysql?在 mysql 中以什么顺序执行连接?
【发布时间】:2016-09-11 11:07:45
【问题描述】:

我已经写了三个连接的 sql 查询。

select *from table1  
LEFT JOIN table2 TTS on table1.field1=  table2.field2 
INNER JOIN  table3 on table1.field3 =  table2.field4  

我的要求是我希望 table1 的所有条目都与 table2 进行左连接。之后,我想与 table3 进行内部连接。所以请告诉sql查询将按照从左到右或从右到左的顺序执行

【问题讨论】:

    标签: mysql join


    【解决方案1】:

    一般来说,joins 在逻辑上按照它们的编写顺序实现(除非括号改变了顺序)。因此,正如所写,您的联接在逻辑上按照您的意图实现。

    查询的实际运行方式留给执行引擎。

    此外,您的查询相当于:

    select . . .
    from table1 INNER JOIN
          table2 TTS
          on table1.field1 = table2.field2 INNER JOIN
          table3
          on table1.field3 = table2.field4  ;
    

    为什么? LEFT JOIN 可能会从 table1 生成在 table2 中没有匹配项的行。 field4 在这些行中将是 NULL,第二个 on 会将它们过滤掉。

    通常,在使用left join 的查询中,第一个之后的所有joins 都是left join。所以你可能打算:

    select . . .
    from table1 LEFT JOIN
          table2 TTS
          on table1.field1 = table2.field2 LEFT JOIN
          table3
          on table1.field3 = table2.field4  ;
    

    这将保留table1 中的所有行,而不考虑其他两个表中的匹配项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多