sql - sql如何处理多个LEFT JOINS

标签 sql sql-server left-join

我没有特别的问题,所以我希望我的问题是有效的。我正在尝试了解有关 LEFT JOIN 的更多信息。

我知道 LEFT JOIN 会将左侧表格的列与右侧表格相匹配。

FROM logs LEFT JOIN logins on logins.login_id = logs.user_id
LEFT JOIN city on logs.city_id = cities.city_id
LEFT JOIN factory on logs.factory_id = factory.factory_id
LEFT JOIN storage on logs.storage_id = storage.storage_id

SQL 以什么特定顺序处理这个问题。请概述正在发生的事情。

谢谢。

补充一下:我对仅涉及一个 LEFT JOIN 时会发生的情况充满信心,但不太确定当最后添加更多 LEFT JOIN 时会发生什么。我假设在虚拟现实中,SQL 服务器将执行第一个 LEFT JOIN,返回结果,然后在下一个 LEFT JOIN 中使用该结果,依此类推。

最佳答案

数据库引擎维护查询的连接顺序。

这么说

 1)A left join B left Join C is not same as 
 2)A left join C left join B

In 1) A is joined to B first and then joined to C
   2) A is joined to C first and then joined to C

注意:以上内容在语义上是正确的。数据库引擎可以选择任何其他连接顺序来优化查询,同时根据语义保持正确的结果。因此,在某些数据库引擎中,查询计划会让您感到困惑。

关于sql - sql如何处理多个LEFT JOINS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29644492/

相关文章:

mysql - SQL 连接 3 个表,其中一个是可选的

sql - 需要查询 SSRS 数据库以获取报告访问权限

Python SQL - 一直说索引 8 'unsupported format character ' 处的 1' even all attributes' f' (0x66) 类型是正确的

c# - "argument ' sql ' cannot be null"在 EF DbMigration 中包含 "Go"时

java - 使用PreparedStatements时SQL Server死锁

mysql - 从另一个表按计数排序

mysql - 选择并计算同一查询中的行?

c# - 需要递归查找。 DB 与 C# GUI

sql-server - 为什么通过函数调用 dbListTables 时会给出警告消息? (R DBI)

mysql - 左连接,如何从右指定1个结果?