我在“遗留”代码中遇到了几个存储过程,这些代码的连接看起来像这样:
SELECT *
FROM TableA
INNER JOIN TableB
INNER JOIN TableC ON TableC.TableBId = TableB.TableBId
ON TableA.TableAId = TableB.TableAId
我会以不同的方式编写此查询,如下所示:
SELECT *
FROM TableA
INNER JOIN TableB ON TableA.TableAId = TableB.TableAId
INNER JOIN TableC ON TableB.TableBId = TableC.TableBId
结果是一样的,但我发现第二个例子更容易理解,特别是在有多个连接的情况下。使用JOIN
子句“延迟”编写ON
语句是否有任何优势,直到指定了所有连接后,如第一个示例中那样?
答案 0 :(得分:2)
不,谓词顺序对它的执行方式无关紧要。您可以将ON谓词放在WHERE中,或者随机混合它们,最后得到相同的执行计划。虽然我在重写代码时会轻描淡写,但我并不完全理解,在你自己的代码中,你应该写出可读的方式。