2010-02-18 81 views
4

什么是正确的语法来执行外部联接下列要求:级联左外联接

A于A.c1 = B.c1
乙左外左外连接乙加入C对B.c2 = C.c2
A.c1上的左外连接D = D.c1

所以A,B和C级联以及A和D级联。

我知道如何编写A-> B-> C,但我不知道如何添加D.我需要范围或括号。

回答

8

这应该工作,只要你想:

SELECT 
    * 
    FROM A 
    left outer join B on A.c1 = B.c1 
    left outer join C on B.c2 = C.c2 
    left outer join D on A.c1 = D.c1 

数据库引擎看什么你都加入到,没有的连接顺序。 D连接到A,并且与B或C无关

+1

+1:我太慢了:( –

3

您加入的顺序无关紧要,数据库将在所有表中建立行的每个组合的结果集,受限于on子句。例如,由于1 = 1总是为真,这将给你1000行:

select * 
from ten_row_table A 
left join ten_row_table B on 1=1 
left join ten_row_table C on 1=1 

但是这会给你10行:

select * 
from ten_row_table A 
left join ten_row_table B on A.id = B.id 
left join ten_row_table C on A.id = C.id 

可以使复杂的查询稍微压痕可读。我们通过四个空格缩进第二个和更多的依赖关系,例如:

from A 
left outer join B on A.c1 = B.c1 
    left outer join C on B.c2 = C.c2 
     left outer join D on C.c3 = D.c3 
    left outer join E on B.c2 = E.c2 
left outer join F on A.c1 = F.c1 
+1

尼斯缩进计划! –