отображение значения, даже если строки не возвращены - PullRequest
0 голосов
/ 30 января 2020

У нас есть ситуация в oracle SQL.

select x from A where x=10;

, поэтому, если в столбце существует 10, будет отображаться значение 10. но если он не существует, я хочу отобразить null. Я пытался NVL, но ничего не возвращается, поскольку данные не отображаются.

Не могли бы вы помочь мне решить эту проблему.

Ответы [ 3 ]

2 голосов
/ 30 января 2020

Если вы хотите вернуть несколько строк из исходного SELECT, вы можете использовать UNION ALL, чтобы добавить строку, когда значение не существует:

SELECT x
FROM   A
WHERE  x = 10
UNION ALL
SELECT NULL
FROM   DUAL
WHERE  NOT EXISTS (
  SELECT x
  FROM   A
  WHERE  x = 10
)

Если ваша таблица:

CREATE TABLE a ( x ) AS
SELECT 10 FROM DUAL UNION ALL
SELECT 10 FROM DUAL UNION ALL
SELECT 10 FROM DUAL;

Тогда запрос выдаст:

|  X |
| -: |
| 10 |
| 10 |
| 10 |

Тогда, если вы DELETE FROM a; и повторите запрос, он выдаст:

|    X |
| ---: |
| <em>null</em> |

дБ <> скрипка здесь

1 голос
/ 30 января 2020

Попробуйте это:

select max(x) 
from A
where x = 10; --this will return null if no data

И тогда вы можете сделать NVL:

select nvl(max(x), 0) 
from A
where x = 10; --this will return 0 if no data
0 голосов
/ 30 января 2020
Предложение

Where отфильтровывает данные, которые вы ищете, если их не существует, запрос не вернет записи.

Таким образом, вы можете удалить предложение where и выполнить агрегирование:

select max(case when a.x = 10 then 10 end)
from a;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...