TSQL——on 子句的顺序是否重要
TSQL -- Does ordering of on clause matter
对于简化查询:
Select t1.c1, t1.c2, t2.d1
FROM table1 t1
LEFT JOIN table2 t2
ON
(t1.c1 = t2.d2)
从对称 属性 的数学看来,这 完全 与将 ON 反转为:
相同
Select t1.c1, t1.c2, t2.d1
FROM table1 t1
LEFT JOIN table2 t2
ON
(t2.d2 = t1.c1)
这在 TSQL 中是否总是正确的,或者是否存在某些异常,如果查询按上述方式进行细微更改,则可以获得更多行?
我了解到非常细微的连接更改(在比这个简单示例复杂得多的查询中)会极大地影响行数。
此外,除了返回的行(我认为这两个查询应该始终完全相同)之外,我认为“ON”子句的一种排序可以使查询具有更好的性能速度。有人可以验证一下吗?
正如您所观察到的,任何类型的 JOIN 中的 ON 条件都可以是可交换的。您可以做 ON a = b
或 ON b = a
并让它们表示完全相同的意思。它们只不过是布尔表达式。
对于简化查询:
Select t1.c1, t1.c2, t2.d1
FROM table1 t1
LEFT JOIN table2 t2
ON
(t1.c1 = t2.d2)
从对称 属性 的数学看来,这 完全 与将 ON 反转为:
相同Select t1.c1, t1.c2, t2.d1
FROM table1 t1
LEFT JOIN table2 t2
ON
(t2.d2 = t1.c1)
这在 TSQL 中是否总是正确的,或者是否存在某些异常,如果查询按上述方式进行细微更改,则可以获得更多行?
我了解到非常细微的连接更改(在比这个简单示例复杂得多的查询中)会极大地影响行数。
此外,除了返回的行(我认为这两个查询应该始终完全相同)之外,我认为“ON”子句的一种排序可以使查询具有更好的性能速度。有人可以验证一下吗?
正如您所观察到的,任何类型的 JOIN 中的 ON 条件都可以是可交换的。您可以做 ON a = b
或 ON b = a
并让它们表示完全相同的意思。它们只不过是布尔表达式。