执行具有以下要求的外部联接的正确语法是什么:
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.我需要范围或括号或其他东西。
答案 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