是否可在多表Inner Join中使用跨表多连接条件?语法是否正确?
关于多表Inner Join中使用跨表连接条件的解答
嘿,你的这个SQL写法完全正确,没有任何错误!
Inner Join的ON子句支持添加多个连接条件,哪怕这些条件涉及到之前已经关联过的表(比如你例子里t2.conditionD = t4.conditionD,这里t2是更早关联的表,t4是当前要关联的表),这是SQL标准允许的写法,所有主流数据库(比如MySQL、PostgreSQL、SQL Server等)都支持。
你的示例代码本身就是合法且合理的:
select t1.x,t1.y, t1.z from t1 inner join t2 on t1.conditionA = t2.conditionA inner join t3 on t2.conditionB = t3.conditionB inner join t4 on t3.conditionC = t4.conditionC and t2.conditionD = t4.conditionD where....
补充说明:
- 把
t2.conditionD = t4.conditionD放在inner join t4的ON子句里,语义上更清晰——明确表示这是关联t4时需要满足的连接条件,而不是后续的过滤条件。 - 如果换成把这个条件放到
WHERE子句里,对于Inner Join来说最终查询结果可能一致,但语义上会模糊连接逻辑和过滤逻辑的边界;如果是Left Join的话,两种写法的结果会有明显差异,所以建议把关联相关的条件都放在ON子句里。
内容的提问来源于stack exchange,提问作者fgc
相关产品推荐
相关产品推荐

