Не уверен, как выглядит ваше условие FULL JOIN. Однако, если вы хотите «получать записи бок о бок» (как указано в вашем комментарии), вы можете сделать что-то вроде ...
select *
from (
select 1 as id, 'abc' as name, 10 as value, 'x' as choice from dual union all
select 2, 'def', 20, 'x' from dual
) Q1 full outer join (
select 1 as id1, 'eft' as name1, 10 as value1, 'y' as choice1 from dual union all
select 2, 'bgf', 20, 'y' from dual
) Q2
on Q1.id = Q2.id1
;
-- result
ID NAME VALUE CHOICE ID1 NAME1 VALUE1 CHOICE1
1 abc 10 x 1 eft 10 y
2 def 20 x 2 bgf 20 y
Это, конечно, даст вам NULL для идентификаторов, которые не "совпадают". Например (одно и то же соединение, разные данные)
select *
from (
select 1 as id, 'abc' as name, 10 as value, 'x' as choice from dual union all
select 2, 'def', 20, 'x' from dual union all
select 4, '_4_', 40, 'g' from dual
) Q1 full outer join (
select 1 as id1, 'eft' as name1, 10 as value1, 'y' as choice1 from dual union all
select 2, 'bgf', 20, 'y' from dual union all
select 5, '_5_', 50, 'z' from dual
) Q2
on Q1.id = Q2.id1
;
ID NAME VALUE CHOICE ID1 NAME1 VALUE1 CHOICE1
1 abc 10 x 1 eft 10 y
2 def 20 x 2 bgf 20 y
NULL NULL NULL NULL 5 _5_ 50 z
4 _4_ 40 g NULL NULL NULL NULL
Предлагаемое Ponder Stibbon решение (спасибо!), Возможно, удалит некоторые из NULL, но в некоторых строках набора результатов могут оказаться записи с разными идентификаторами.
select *
from (
select id, name, value, choice, rownum row_
from (
select 1 as id, 'abc' as name, 10 as value, 'x' as choice from dual union all
select 2, 'def', 20, 'x' from dual union all
select 4, '_4_', 40, 'g' from dual
)
) Q1 full join (
select id1, name1, value1, choice1, rownum row_
from (
select 1 as id1, 'eft' as name1, 10 as value1, 'y' as choice1 from dual union all
select 2, 'bgf', 20, 'y' from dual union all
select 5, '_5_', 50, 'z' from dual
)
) Q2 on Q1.row_ = Q2.row_
;
-- result
ID NAME VALUE CHOICE ROW_ ID1 NAME1 VALUE1 CHOICE1 ROW_
1 abc 10 x 1 1 eft 10 y 1
2 def 20 x 2 2 bgf 20 y 2
4 _4_ 40 g 3 5 _5_ 50 z 3