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
中的特定值,则可以向子查询添加过滤器。
环境: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
中的特定值,则可以向子查询添加过滤器。