2011-04-03 93 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