2012-05-08 97 views
13

而不是使用像FULL OUTER JOIN或FULL JOIN這樣的關鍵字,我怎樣才能在'+'操作符的幫助下使用'where'子句執行完全外連接?如何使用'+'運算符在ORACLE中執行FULL OUTER JOIN?

+4

你將不得不聯合起來2外的結果連接的查詢(一個爲A - > B和一個對於B - > A) –

+2

你爲什麼會想要?使用顯式連接,這是首選的方法。隱式連接區域SQL反模式。 – HLGEM

+3

你爲什麼要這麼做?只需使用'FULL OUTER JOIN'語法(強烈建議使用明確的ANSI樣式連接來強制推薦) –

回答

19

你不能(至少直接)。 Oracle僅支持使用SQL:1999語法的完整外連接。

您可以僞造它通過unioning兩個外部聯接:

select a.field1, b.field2 
from table_a a, table_b b 
where a.id = b.id(+) 
union all 
select a.field1, b.field2 
from table_a a, table b b 
where a.id(+) = b.id 
     and a.id is null 

它使用SQL的很多更具可讀性:1999語法:

select a.field1, b.field2 
from table_a a full outer join table_b b 
on a.id = b.id 
+0

感謝Allan ... – Munna89

3

這裏是你可以在Oracle運行看一個例子你自己的結果也是如此。

with 
a as 
    (select 'A' tbl, level id from dual connect by level < 1000), 
b as 
    (select 'B' tbl, level + 500 id from dual connect by level < 1000) 
select a.tbl, a.id, b.tbl, b.id from a, b where a.id = b.id(+) 
union all 
select a.tbl, a.id, b.tbl, b.id from a, b where a.id(+) = b.id and a.id is null 

是一樣的:

with 
a as 
    (select 'A' tbl, level id from dual connect by level < 1000), 
b as 
    (select 'B' tbl, level + 500 id from dual connect by level < 1000) 
select a.tbl, a.id, b.tbl, b.id from a full outer join b on a.id = b.id