2016-02-24 3 views
3

Следующее выражениеСравнение со значением, которое может быть NULL

SELECT * FROM t 
WHERE a = (SELECT MAX(a) FROM s) 

возвращает ничего, если подзапрос возвращает NULL - даже если есть провалов в t.a.

Я хотел бы вернуть значения NULL из t, когда подзапрос возвращает значения NULL и non-NULL из t, если есть какие-либо подзапросы.

Есть ли чистый способ сделать это?

+0

'ВЫБРАТЬ COALESCE (MAX (а), 0) FROM s' Попробуйте –

+0

@JaydipJ, я думал об этом, это не так чисто, мне нужно использовать вместо 0 значение, которое Я знаю, что это не так, вообще не может быть такой ценности. – Evgeny

+0

@ Evgeny Итак, что вы ожидаете? –

ответ

4

Выражение x IS NOT DISTINCT FROM y эквивалентно (x = y) OR (x IS NULL AND y IS NULL). Итак:

SELECT * FROM t 
WHERE a IS NOT DISTINCT FROM (SELECT MAX(a) FROM s) 
Смежные вопросы