2012-05-08 11 views
13

Invece di utilizzare parole chiave come FULL OUTER JOIN o FULL JOIN, come posso eseguire il join esterno completo usando la clausola 'where' con l'aiuto dell'operatore '+' ?!Come eseguire FULL OUTER JOIN in ORACLE usando l'operatore '+'?

+4

Si dovrà UNION insieme i risultati di 2 outer join query (uno per A -> B e uno per B -> A) –

+2

perché dovreste volere? Utilizza join espliciti, è il metodo preferito. Entità implicite di SQL antipattern. – HLGEM

+3

Perché dovresti farlo? Basta usare la sintassi 'FULL OUTER JOIN' (si consiglia comunque di utilizzare esplicitamente join di stile ANSI su join impliciti) –

risposta

19

Non è possibile (almeno direttamente). Oracle supporta solo un join esterno completo utilizzando la sintassi SQL: 1999.

Puoi fingere da unioning due outer join:

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 

E 'molto più leggibile utilizzando SQL: 1999 sintassi:

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

grazie Allan ... – Munna89

3

Ecco un esempio è possibile eseguire in Oracle per vedere i risultati per te stesso.

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 

è la stessa:

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