Соединение влево между 2 таблицами с использованием 3 столбцов и соединение с третьей таблицей в Oracle - PullRequest
4 голосов
/ 03 апреля 2011

Я использую Oracle и мне нужно объединить 2 таблицы (которые на самом деле являются одной и той же таблицей с псевдонимом) на основе 3 столбцов, а затем объединить с третьей таблицей.Какой должен быть лучший синтаксис?

Select table_3.column_x
  From (table_1 left join table_2
 Using (column_1 , column_2 , column_3)), table_3
 Where Table_2.column_1 = table_3.column_1

Должен ли я использовать ',' в выражении using или AND?Куда именно я должен вставить инструкцию table_3, даже если она не используется в левом соединении?

1 Ответ

6 голосов
/ 03 апреля 2011

Использование ANSI SQL:

select * from
TABLE1 "TABLE1"
left join TABLE1 "TABLE2" on(TABLE1.c1 = TABLE2.C1 and TABLE1.c2 = TABLE2.C2)
left join TABLE3 "TABLE3" on(TABLE1.c3 = TABLE3.c3)

Используя синтаксис Oracle Join, вы получаете:

select * from TABLE1 "TABLE1", TABLE1 "TABLE2", TABLE3 "TABLE3"
where
    TABLE1.c1 = TABLE2.c1 (+)
and TABLE1.c2 = TABLE2.c2 (+)
and TABLE1.c3 = TABLE3.c3 (+)

(+) здесь представляет левое соединение. Я лично предпочитаю ANSI SQL. Мне кажется чище. Ваши предикаты соединения могут не совпадать с моим примером, имейте это в виду.

...