lor*_*tol 6 sql oracle join inner-join left-join
说,我有以下查询:
SELECT * FROM TABLE1
JOIN TABLE2 ON ...
LEFT JOIN TABLE3 ON ...
JOIN TABLE3_1 ON ...
JOIN TABLE3_2 ON ...
JOIN TABLE3_3 ON ...
Run Code Online (Sandbox Code Playgroud)
我想要实现的是TABLE3,TABLE3_1,TABLE3_2,TABLE3_3内部连接(我只需要它们之间的所有匹配数据,其余的都没有).然后对于TABLE1,TABLE2也有内部连接.但是从TABLE1 + TABLE2结果来看,有些将没有相应的TABLE3条目,这没关系,我仍然会想要它.
如果按原样运行上面的伪代码,显然它不会达到相同的结果.
Ser*_*erg 11
使用paretheses强制连接顺序,种类
SELECT *
FROM (
TABLE1
JOIN TABLE2 ON ...)
LEFT JOIN (
TABLE3
JOIN TABLE3_1 ON ...
JOIN TABLE3_2 ON ...
JOIN TABLE3_3 ON ...) ON ...
Run Code Online (Sandbox Code Playgroud)
检查这个答案。
@Serg 答案是正确的,但如果您ON在语句末尾指定条件,则不需要使用括号。
SELECT * FROM TABLE1
JOIN TABLE2 ON ...
LEFT JOIN TABLE3 ON ThisConditionShouldBeAtTheEnd
JOIN TABLE3_1 ON ...
JOIN TABLE3_2 ON ...
JOIN TABLE3_3 ON ...
Run Code Online (Sandbox Code Playgroud)
你这样重写:
SELECT * FROM TABLE1
JOIN TABLE2 ON ...
LEFT JOIN TABLE3
JOIN TABLE3_1 ON ...
JOIN TABLE3_2 ON ...
JOIN TABLE3_3 ON ...
ON ThisConditionShouldBeAtTheEnd
Run Code Online (Sandbox Code Playgroud)
另请参阅本文以获取更多解释。原因是 JOIN 条件是从左到右(自上而下)评估的,您需要在先前的内部连接之后评估 LEFT 连接条件。
| 归档时间: |
|
| 查看次数: |
6229 次 |
| 最近记录: |