外连接查询需要FROM_TABLE标志

时间:2018-04-09 05:00:48

标签: oracle

我想在oracle中输出全外连接的一个标志,说from_table,显示这个tows是外连接中的哪个表。

对于前 完全外连接将为您提供A和B的并集,即A中的所有行和B中的所有行。如果A中的某些内容在B中没有相应的数据,那么B部分为空,反之亦然。

select * from a FULL OUTER JOIN b on a.a = b.b;

 a   |  b
-----+-----
   1 | null
   2 | null
   3 |    3
   4 |    4
null |    6
null |    5

我需要以下输出:

a   |  b | from_table
-----+-----
   1 | null | A
   2 | null | A
   3 |    3 | both
   4 |    4 | both
null |    6 | B
null |    5 | B

请建议查询

2 个答案:

答案 0 :(得分:1)

select a.*, b.*,
       case when a.a is not null and b.b is not null then 'both'
            when a.a is not null then 'a'
            else 'b'
       end as from_table
from a 
FULL OUTER JOIN b on a.a = b.b;

SQLFiddle Demo

答案 1 :(得分:0)

它有资格连续使用nvlnvl2个功能:

select a, b, decode(sign(nvl2(x,1,0)*nvl2(y,1,0)),1,'both',nvl(x,y)) "from_table"
  from
(
 select a.*, b.*, nvl2(a,'A',null) x, nvl2(b,'B',null) y 
   from a FULL OUTER JOIN b on a.a = b.b order by a,b
 );

demo