
В своей лекции про "сложные" 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-кода - и ваши запросы "будут мягкими и шелковистыми"!
