Как правильно отфильтровать значения NULL по одному сложному (для меня) условию?
Нужна ваша помощь. Есть таблица вида
| ID | HIGH | LOW |
|---|---|---|
| id1 | '1' | (null) |
| id1 | '1' | (null) |
| id1 | (null) | (null) |
| id2 | (null) | (null) |
| id2 | (null) | (null) |
| id2 | (null) | (null) |
| id2 | (null) | (null) |
| id2 | (null) | (null) |
Каким запросом можно отфильтровать столбец ID, чтобы туда попали только те ID, для которых во всех строках значения HIGH и LOW равны NULL (Поля HIWH и LOW являются типом VARCHAR2, не числом).
Т.е. для ID1, несмотря на то, что одна строка попадает под условие, не должен попасть в выборку, т.к. имеет строки не подходящие по условия. А вот ID2 - должен, т.к. у него во всех строках HIGH и LOW значения NULL.
Ответы (1 шт):
Ниже селект из вашего первого вопроса, только модифицированный с использованием функции nvl.
nvl в качестве аргументов принимает 2 значения, первое это проверяемое значение(обычно поле, но можно и функцию вставить), второе возвращаемое значение, если первое оказалось NULL.
В примере ниже, nvl(high, 0) - если поле high будет null, вернется 0.
Так же можно передавать в качестве второго параметра поля и функции.
select id from high_and_low
group by id
having sum(nvl(high, 0)) + sum(nvl(low, 0)) = 0
Для строк можно попробовать преобразовать null к такому значению, которого гарантированно нет в полях и сравнивать с объединением значений:
select id from high_and_low
group by id
having nvl(high, 'NullValue') || nvl(low, 'NullValue') = 'NullValueNullValue'