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

时间:2016-05-15 16:22:41

标签: mysql join

我已经编写了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 个答案:

答案 0 :(得分:1)

通常,join按照编写顺序逻辑实现(除非括号更改顺序)。因此,正如所写的那样,您的联接是按照您的意图逻辑实现的。

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

此外,您的查询相当于:

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

为什么呢? LEFT JOIN可能会在table1中生成table2中没有匹配项的行。这些行中的field4NULL,第二行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

这将保留{{1}}中的所有行,而不管其他两个表中的匹配。