Oracle-如果条件失败,如何修改条件以选择全部?

问题描述 投票:0回答:2

我的目标是选择所有数据,包括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
sql oracle conditional-statements
2个回答
1
投票

使用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的所有行。


0
投票

如果只想引用“表”一次,则可以使用窗口功能:

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;

当“表”实际上是一个复杂的表达式并且您要确保不会对其进行多次评估时,这很有用。

© www.soinside.com 2019 - 2024. All rights reserved.