2012-05-08 26 views
13

En lugar de utilizar palabras clave como FULL OUTER JOIN o FULL JOIN, ¿cómo puedo realizar la combinación externa usando la cláusula 'where' con la ayuda del operador '+'?¿Cómo realizar la UNIÓN EXTERIOR COMPLETA en ORACLE usando el operador '+'?

+4

Usted tendría que UNIÓN juntos los resultados de 2 combinación externa consultas (una para A -> B y uno de B -> A) –

+2

¿por qué se ¿querer? Use combinaciones explícitas, es el método preferido. Implícito se une área antipattern SQL. – HLGEM

+3

¿Por qué querrías hacer eso? Simplemente use la sintaxis 'FULL OUTER JOIN' (utilizando el estilo ANSI explícito se une a implict joins es muy recomendable de todos modos) –

Respuesta

19

No puede (al menos directamente). Oracle solo admite una combinación externa completa utilizando SQL: sintaxis de 1999.

Usted puede fingir por unificante dos combinaciones externas:

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 

Es mucho más fácil de leer usando el SQL: 1999 sintaxis:

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

gracias Allan ... – Munna89

3

He aquí un ejemplo se puede ejecutar en el oráculo para ver los resultados para ti también.

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 

Es lo mismo que:

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 
Cuestiones relacionadas