Чтобы избежать select
в case
, cross join
с constant
может помочь. Хотя, я думаю, она (таблица constant
) мала и возвращает только одну строку для этого условия, так что в любом случае это достаточно быстро.
SELECT e.*
FROM employee e
CROSS JOIN constant c
JOIN department d
ON d.dept_no =
CASE WHEN e.dept_no = 11 THEN c.id ELSE e.dept_no END
WHERE c.constant_name = 'ABC';
Тем временем проверьте, участвуют ли столбцы в операции объединения (dept_no
) индексируются.
Объясните план может раскрыть некоторую полезную информацию.