【发布时间】:2021-10-21 03:22:26
【问题描述】:
我使用的是 SQL Server 2019,在优化时我发现加入条件的放置方式不同,如下所示,
SELECT *
FROM #table1 a
INNER JOIN dbo.table2 b
INNER JOIN dbo.table3 c ON c.id = b.id
ON b.id=a.id
SQL Server 引擎实际上是如何工作的? 把这个join改成如下后,sql server会返回类似的返回,
SELECT *
FROM #table1 a
INNER JOIN dbo.table2 b ON b.id=a.id
INNER JOIN dbo.table3 c ON c.id = b.id
能否请您帮助我了解这两个查询的工作方式是否相同?如果不是,那么第一个查询与第二个查询有何不同?
【问题讨论】:
-
#table1 和 table2 之间的第一个查询执行 CROSS JOIN,#table1 的每一行与 table2 的每一行连接。 See this
-
@Max - 不,它没有。它完全按照它所说的那样执行
INNER JOIN。不同之处在于该连接是在 另一个连接之后计算的。 -
在这种情况下,只有
INNER JOIN和每个ON子句只引用两个表,逻辑结果是相同的。 -
通常,当第一个连接是
LEFT JOIN时,前一种语法更有意义;仅INNER JOINs 确实不需要令人困惑的语法。 -
@Damien_The_Unbeliever 你是对的,我读得很快我没有注意到第二个
b.id = a.id。对不起。
标签: sql-server