Я использую Oracle 10g (XE 10.2.0.1.0) и обнаруживаю поведение, которое я не понимаю:
select *
from employees manager
join employees worker on MANAGER.EMPLOYEE_ID = WORKER.MANAGER_ID
join departments on DEPARTMENTS.manager_id = 108
where
department_id = 100
;
Проблема заключается в том, что Oracle должен жаловаться на двусмысленность department_id
в предложении where, так как это столбец в таблице employees
и departments
. Дело в Oracle 10g, это не так, и результат показывает, что он интерпретирует department_id
как тот, что находится в departments
. Однако, если я прокомментирую второй оператор объединения (4-я строка выше), Oracle жалуется на "ORA-00918: столбец неопределенно определен", как ожидалось.
Итак, может кто-нибудь помочь объяснить, как неопределенность определена в Oracle 10g? Или, возможно, это ошибка в 10g?
BTW: таблицы определены в схеме HR по умолчанию, входящей в состав Oracle 10g.
Обновление: просто нашел связанный пост: Почему Oracle SQL загадочно разрешает двусмысленность в одном соединении и не участвует в других