Oracle-как изменить условие, чтобы выбрать все, если условие не выполняется? - PullRequest
0 голосов
/ 06 октября 2019

Моя цель - выбрать все данные, включая 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

Ответы [ 2 ]

1 голос
/ 06 октября 2019

С 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 вернет все строки DD только в случае сбоя WHERE A = 2.

0 голосов
/ 06 октября 2019

Если вы хотите обратиться к «таблице» только один раз, вы можете использовать оконные функции:

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;

Это может быть полезно, когда «таблица» на самом деле является сложным выражением, и вы хотите убедиться, чточто он не оценивается несколько раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...