Присоединиться к запросу в оракуле 10g

Я написал этот запрос, чтобы отобразить фамилию, номер отдела и название отдела всех сотрудников, работающих в Торонто.

select last_name, job_id, department_id, department_name
from employees e
 join departments d on d.department_id=e.department_id
 join locations l on d.location_id=l.location_id and l.city='Toronto';

Я получаю эту ошибку ORA-00918: столбец определен неоднозначно


person Koneri    schedule 04.05.2013    source источник


Ответы (4)


изменить первую строку на:

select e.last_name, e.job_id, e.department_id, d.department_name
person Yahia    schedule 04.05.2013
comment
Яхия рабочая. Спасибо. Итак, для моего понимания. поэтому, если мы используем несколько таблиц для извлечения, всегда нужно использовать псевдонимы таблиц? - person Koneri; 04.05.2013
comment
@user2186265 user2186265 не обязательно, НО, если какие-либо имена столбцов в этих таблицах существуют более одного раза, вам нужно использовать псевдонимы ... - person Yahia; 04.05.2013
comment
Было бы хорошей практикой использовать псевдонимы таблиц всякий раз, когда задействовано более одной таблицы. Будущим сотрудникам проще и надежнее работать с кодом. - person David Aldridge; 04.05.2013

Когда столбец существует в обеих таблицах, участвующих в объединении, вам необходимо указать префикс имени столбца с псевдонимом, чтобы указать, какой столбец вы хотите. В вашем объединении department_id используется обеими таблицами, вы можете указать, какой столбец вы хотите использовать d.department_id в списке выбранных столбцов.

select 
  last_name, 
  job_id, 
  d.department_id, --specify which table you want this ambiguous column from
  department_name
from employees e
  join departments d 
  on d.department_id=e.department_id
  join locations l on 
  d.location_id=l.location_id and l.city='Toronto';
person Kevin Bowersox    schedule 04.05.2013

используйте псевдоним для выбора столбца из любой конкретной таблицы. Например, простая запись department_id вызовет ошибку, поскольку она доступна для нескольких таблиц и вызовет ошибку неоднозначности.

Таким образом, лучшим решением является выбор столбца с псевдонимом, например

 select e.last_name, e.job_id, e.department_id, d.department_name
 from employees e
 join departments d on d.department_id=e.department_id
 join locations l on d.location_id=l.location_id and l.city='Toronto';
person Ravi    schedule 04.05.2013

Попробуй это:

select last_name, job_id, department_id, department_name 
from employees 
join departments using(department_id) 
join locations using(location_id) where city='Toronto';
person Abhishek Suryawanshi    schedule 08.08.2017