Я использую 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? А может это глюк в 10г?
Кстати: таблицы определены в схеме HR по умолчанию, включенной в Oracle 10g.
Обновление: только что нашел связанный пост: Почему Oracle SQL таинственным образом разрешает неоднозначность в одних соединениях и не разрешает их в других
select * from employees manager join employees worker on MANAGER.EMPLOYEE_ID = WORKER.MANAGER_ID join departments depts on depts.manager_id = 108 where department_id = 100 ;
- person Sapience   schedule 09.06.2011SELECT * FROM employees manager, employees worker, departments WHERE MANAGER.EMPLOYEE_ID = WORKER.MANAGER_ID AND DEPARTMENTS.manager_id = 108 AND department_id = 100 ;
- person mcha   schedule 09.06.2011