我的目标是选择所有数据,包括NULL,如果条件失败。如何修改条件?
WITH DD AS (
SELECT 1 A FROM DUAL
UNION
SELECT NULL A FROM DUAL
)SELECT * FROM DD
WHERE A =2 ????? ; -- How to modify this condition?
预期结果
A
---
1
NULL
使用UNION ALL
而不是EXISTS
:
WITH DD AS (
SELECT 1 A FROM DUAL
UNION
SELECT NULL A FROM DUAL
)
SELECT * FROM DD
WHERE A =2
UNION ALL
SELECT * FROM DD
WHERE NOT EXISTS (
SELECT 1 FROM DD
WHERE A = 2
)
UNION ALL
之后的查询仅在WHERE A = 2
失败时才返回DD的所有行。
如果只想引用“表”一次,则可以使用窗口功能:
select dd.a
from (select dd.*,
sum(case when a = 2 then 1 else 0 end) over () as cnt
from dd
) dd
where a = 2 or cnt = 0;
当“表”实际上是一个复杂的表达式并且您要确保不会对其进行多次评估时,这很有用。