Не существует такого понятия, как «условное» объединение.Вы можете сделать:
SELECT e.*,
COALESCE(d1.col1, d2.col1) as col1
FROM emp e LEFT JOIN
d1
ON e.deptno = d1.deptno AND e.deptno <= 20 LEFT JOIN
d2
ON e.deptno = d2.deptno AND e.deptno > 20;
Обратите внимание, что ваш запрос не выбирает ничего из d1
или d2
.В этом смысле JOIN
совсем не нужен.Обратите внимание на логику в SELECT
для получения значений из столбцов.
Если вы используете объединения для фильтрации, добавьте:
WHERE d2.deptno IS NOT NULL OR d1.deptno IS NOT NULL.