Я использую 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?
Кстати: таблицы определены в схеме HR по умолчанию, связанной с Oracle 10g.
Обновление: только что нашел связанный пост:
Почему Oracle SQL таинственным образом разрешает неоднозначность в одних объединениях, а не в других