SEa*_*986 2 sql sql-server syntax join
我正在调试由其他人创建的报告,它具有以下加入条件。(我已根据自己的喜好进行了布局,并对表名进行了匿名化处理)
SELECT --columns
FROM Table1
JOIN Table2
JOIN Table3
ON Table2.pred = Table3.pred
JOIN Table4
ON Table2.pred = Table4.pred
JOIN Table5
ON Table2.pred = Table5.pred AND Table2.pred = Table5.pred AND Table3.pred = Table5.pred
JOIN Table6
ON Table3.pred = Table6.pred
ON Table1.pred = Table5.pred AND Table1.pred = Table5.pred
LEFT JOIN Table7
ON Table5.pred = Table7.pred AND Table5.pred = Table7.pred
LEFT JOIN Table7 AS Table7_1
ON Table5.pred = Table7_1.pred AND Table5.pred = Table7_1.pred
WHERE --conditions
Run Code Online (Sandbox Code Playgroud)
我感到困惑的是,没有将 Table1 与表 2 关联的联接,并且在联接到表 6 之后有两个 ON 子句。通常会联接多个表:
FROM Table
JOIN Table2
ON --criteria
JOIN Table3
ON --criteria
JOIN Table4
ON --criteria
--etc
Run Code Online (Sandbox Code Playgroud)
该查询有效,但当有人试图弄清楚它在做什么时,我很挣扎,因为我以前从未见过连接语法。
有人能给我解释一下语法吗?
这是有效的语法。这是一个更简单的例子:
from t1 join
t2 join
t3
on t2.? = t3.?
on t1.? = t2.?
Run Code Online (Sandbox Code Playgroud)
如果加上括号,就更有意义了:
from t1 join
(t2 join
t3
on t2.? = t3.?
) on t1.? = t2.?
Run Code Online (Sandbox Code Playgroud)
尽管允许,但我强烈建议您不要使用此语法。重写查询,使joins 和ons 交错。