2011-04-03 55 views
4

我正在使用Oracle,需要根據3列左連接2個表(實際上是具有別名的同一個表),然後連接第三個表。什麼應該是最好的語法?使用3列左右連接2個表並連接到Oracle上的第三個表

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語句,即使它不在左連接上使用?

回答

6

使用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聯接語法您有:

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方式。這對我來說似乎更清潔。請注意,您的連接謂詞可能與我的示例不一樣。

+0

括號不是必需的。 Oracle OUTER JOIN語法被認爲已被棄用。 – 2011-04-03 17:53:14

+2

@OMGPonies如果您在Oracle商店工作,請不要使用:) – 2014-03-12 00:02:37