级联左外连接

时间:2010-02-18 20:04:52

标签: sql

执行具有以下要求的外部联接的正确语法是什么:

A.c1 = B.c1上的左外连接B. B在B.c2 = C.c2上留下外连接C. A.c1 = D.c1

上的左外连接D.

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

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

2 个答案:

答案 0 :(得分:9)

这应该可以按你的意愿运作:

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 :(得分:4)

您加入的顺序无关紧要,数据库将构建所有表中每个行组合的结果集,受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