Oracle SQL 基于 UNION 的查询

Oracle SQL Query based on a UNION

环境:Oracle 12c

我在 Oracle 中有一个查询,它是两个表之间的 UNION:TABLE_A 和 TABLE_B。

select ID as COL_A,
       VAL_B as COL_B,
       VAL_C as COL_C,
       VAL_D as COL_D,
       VAL_E as COL_E
from   TABLE_A
where  VAL_E = 'XYZ12'
union
select NULL as COL_A,
       NULL_B as COL_B,
       VAL_C as  COL_C,
       NULL as COL_D,
       VAL_E as COL_E
from   TABLE_B
where  VAL_E = 'XYZ12'
and    ?????

COL_A  COL_B  COL_C  COL_D COL_E
------ ------ ------ ----- -----
123    REQ1   REQ2   REQ3  XYZ12
              REQ2         XYZ12

根据上面的查询,我被卡住的地方是,如果 'XYZ12' and 'REQ1' 的记录存在,那么我只想 return 这条记录,否则 return 第二条记录,即 'XYZ12' 存在但 COL_B IS NULL

如果主记录存在于 TABLE_A 中,则它是第一个记录。根据我的标准,如果它不存在,那么 return 仅来自 TABLE_B.

的第二条记录

根据您问题中的数据和查询,table_a 似乎最多只有一行。因此你可以简单地添加:

from TABLE_B 
where VAL_E = 'XYZ12' and
      not exists (select 1 from table_a a)

如果要检查 table_a 中的特定值,则可以向子查询添加过滤器。