2010-02-18 4 views
4

Что такое правильный синтаксис для выполнения внешнего соединения со следующими требованиями:каскадных оставили внешние соединения

левое внешнее соединение B на A.c1 = B.c1
В левое внешнее соединение C на B.c2 = C.c2
Левое внешнее соединение D на A.c1 = 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 

двигатель DB смотрит на то, что ваш присоединяетесь к, а не порядок стыки. 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

Хорошая схема отступы! –