В своей лекции про "сложные" SELECT я уже рассказывал про возможности оператора CASE
, а еще раньше - про возможности оптимизации выполнения запросов с его помощью.
Но иногда он вовсе не нужен! Обратите внимание на картинку сверху...
Посмотрим на использованный тут синтаксис CASE:
CASE
WHEN условие THEN результат
[WHEN ...]
[ELSE результат]
END
Или еще конкретнее:
CASE
WHEN условие THEN TRUE -- [условие IS TRUE]
ELSE FALSE -- [условие IS FALSE, IS NULL]
END
Хм... То есть результат этого CASE
эквивалентен значению условия с точностью до NULL
!
При обращении условия в NULL
такой CASE
вернет FALSE
, но этого же поведения можно добиться с помощью coalesce:
coalesce(условие, FALSE)
Но если мы говорим о конкретном примере с условием EXISTS, то уж оно-то точно никак не может принимать значение NULL
! Значит, coalesce
-обертка нам тут не требуется и эту часть запроса можно сократить до одного лишь условия, без всяких CASE
:
EXISTS(
SELECT
NULL
FROM
_inforg20687 t15
WHERE
t15._fld1329 = 0::numeric AND
t15._fld20688rref = t6._idrref AND
t15._fld20689_type = '\\010'::bytea AND
t15._fld20689_rtref = '\\000\\000\\001\\010'::bytea AND
t15._fld20689_rrref = t4._fld6883rref
)
В общем, пишите меньше SQL-кода - и ваши запросы "будут мягкими и шелковистыми"!