Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle如何修改条件以在条件失败时选择全部?_Sql_Oracle_Conditional Statements - Fatal编程技术网

Sql Oracle如何修改条件以在条件失败时选择全部?

Sql Oracle如何修改条件以在条件失败时选择全部?,sql,oracle,conditional-statements,Sql,Oracle,Conditional Statements,我的目标是选择所有数据,包括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 使用联合所有和非存在: WITH DD AS ( SELECT 1 A FROM DUAL UNION SE

我的目标是选择所有数据,包括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

使用
联合所有
和非
存在

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
)

只有当A=2的
失败时,
UNION ALL
之后的查询才会返回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;
当“表”实际上是一个复杂的表达式,并且您希望确保它不会被多次计算时,这会很有帮助