Frage Wie führe ich FULL OUTER JOIN in ORACLE mit dem Operator '+' aus?


Anstatt Schlüsselwörter wie FULL OUTER JOIN oder FULL JOIN zu verwenden, wie kann ich den vollständigen Outer Join mithilfe der Where-Klausel mit Hilfe des Operators "+" ausführen ?!


13
2018-05-08 13:54


Ursprung


Antworten:


Du kannst nicht (zumindest direkt). Oracle unterstützt nur einen vollständigen äußeren Join mit der SQL: 1999-Syntax.

Sie können es fälschen, indem Sie zwei äußere Joins verbinden:

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 ist viel besser lesbar mit der SQL: 1999-Syntax:

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

19
2018-05-08 13:59



Hier ist ein Beispiel, das Sie in Oracle ausführen können, um die Ergebnisse auch für sich selbst zu sehen.

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

Ist das gleiche wie:

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

3
2018-05-08 15:09