mysql - mysql 中连接按什么顺序执行?

标签 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 进行内连接。所以请告诉我们sql查询将按照从左到右或从右到左的顺序执行

最佳答案

一般来说,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 中没有匹配项的行。这些行中的 field4 将为 NULL,第二个 on 会将它们过滤掉。

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

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

这将保留 table1 中的所有行,无论其他两个表中是否匹配。

关于mysql - mysql 中连接按什么顺序执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37240717/

相关文章:

当 as 列不编译时的 Mysql 条件情况

php - 关系数据库表的 ER 图

sql - 复杂的 SQL 查询 - 查找一组内容,对其进行计数,然后查找第一个集合的子集,并对其进行计数

mysql - 对抗 INNER JOINS - Chapter : unknown column

c# - 在 LINQ to SQL 连接中使用包含

mysql - LONGTEXT 在 PGSQL 和 MySQL 的迁移中有效

java - 关闭与 MySQL 的连接时出现 JDBC Socket 异常

php - 加入查询不起作用

mysql - JOIN 表本身?

sql - 可以将 INNER JOIN 与主键一起使用吗?