SQL多表连接中ON条件后置写法与常规写法是否等价?
多表连接后置ON条件的写法等价性问题
在维护他人代码时,我遇到了一种不常见的多表连接写法——将ON条件后置,示例代码如下:
SELECT ID, Seq, Val1, Val2 FROM Table1 t1 INNER JOIN Table2 t2 INNER JOIN Table3 t3 ON t2.ID = t3.ID AND t2.Seq = t3.Seq ON t1.ID = t2.ID
请问该写法是否与以下常规写法等价?
SELECT ID, Seq, Val1, Val2 FROM Table1 t1 INNER JOIN Table2 t2 ON t1.ID = t2.ID INNER JOIN Table3 t3 ON t2.ID = t3.ID AND t2.Seq = t3.Seq
结论
这两种写法完全等价,逻辑上没有区别。
这种后置ON的写法是SQL标准允许的语法,只是改变了连接逻辑的书写顺序:
- 后置写法的执行逻辑是先将
Table2与Table3通过t2.ID = t3.ID AND t2.Seq = t3.Seq完成内连接,再把这个连接结果和Table1通过t1.ID = t2.ID做内连接; - 常规写法则是先连接
Table1和Table2,再连接Table3。
但因为都是内连接,内连接满足交换律和结合律,只要连接条件不变,最终匹配出的结果集完全一致。
注意:如果是外连接(如
LEFT JOIN),这种后置ON的写法可能会改变逻辑,因为外连接的顺序会直接影响需要保留全部数据的表;但本例中都是内连接,所以无需担心逻辑差异。
内容的提问来源于stack exchange,提问作者klaki
相关产品推荐
相关产品推荐

