Подтвердить что ты не робот

Как выполнить FULL OUTER JOIN в ORACLE с помощью оператора "+"?

Вместо того, чтобы использовать ключевые слова, такие как FULL OUTER JOIN или FULL JOIN, как я могу выполнить полное внешнее соединение, используя предложение "where" с помощью оператора "+"?!

4b9b3361

Ответ 1

Вы не можете (по крайней мере, напрямую). Oracle поддерживает только полное внешнее соединение с использованием синтаксиса SQL: 1999.

Вы можете подделать его, объединив два внешних соединения:

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

Ответ 2

Вот пример, который вы можете запустить в 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