首页 文章

在mysql中以哪种顺序连接执行?

提问于
浏览
0

我写了sql查询,有三个连接 .

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

我的要求是我想要table1的所有条目,所以左边连接table2 . 之后我想用table3连接Inner . 所以请告诉我们sql查询将从左到右或从右到左执行的顺序

1 回答

  • 1

    通常, join 在逻辑上按照它们的写入顺序实现(除非括号更改顺序) . 因此,正如所写,您的联接是按照您的意图逻辑实现的 .

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

    此外,您的查询相当于:

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

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

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

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

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

相关问题