2012-06-14 6 views
0

Нужна помощь с запросом, который я написал:Присоединение три таблицы (таблица соединений)

У меня есть три таблицы

Компания

id  name 
1  Gary's 

Сотрудник

id  name   company_id 
1  Tim Jones  1 
2  Sam Adams  1 

доклады

employee_id  reports_to_id 
    1     2  

Мой текущий запрос является:

select 
    temp.company.name as comp_name, 
    temp.employee.name as employee_name, 
    temp.employee.id as employee_id 
from temp.employee, temp.employee 
where temp.company.id = temp.employee.company_id and temp.company.id = 1 

Который дает мне выход:

comp_name employee_name  employee_id 
Gary's  Tim Jones   1 

мне нужно что-то вроде этого:

comp_name  employee_name reports_to 
Gary's   Tim Jones  Sam Adams 

Какой хороший способ изменить мой запрос, чтобы сделать это? У меня есть запрос, а затем я беру эти результаты и запускаю второй запрос в отношении этого набора результатов (что излишне ненужно).

+0

Не могли бы вы перечислить более подробную информацию о таблице 'temp.contact'? – Li0liQ

+0

Ваш запрос и вывод не совпадают. Какая таблица является «контактным именем»; это должно быть 'employee_name'? Кроме того, какая таблица является «report_to»? Это должно быть другое employee.name? Является ли идентификатор сотрудника «Сэм Адамс» '1032012'? – gcochard

+0

'от temp.employee, temp.employee' верен? – xelco52

ответ

4

Предполагая, что сотрудник сообщает только одному человеку, то мы не могли бы (не таблица соединений)

Employee (Id, Name, CompanyId, ReportsToId) 
Company (Id, Name) 

Тогда вы могли бы иметь запрос, аналогичный

select e.Name EmployeeName, c.Name CompanyName, r.Name ReportsTo 
from 
    Employee e 
     inner join Company c on e.CompanyId = c.Id 
     inner join Employee r on e.ReportsToId = r.Id 
where 
    e.CompanyId = 1 

Если отчеты сотрудников с несколькими людьми то мы будем использовать таблицу ссылок

Employee (Id, Name, CompanyId) 
EmployeeReportsTo (EmployeeId, ManagerId) 
Company (Id, Name) 

select e.Name EmployeeName, c.Name CompanyName, r.Name ReportsTo 
from 
    Employee e 
     inner join Company c on e.CompanyId = c.Id 
     inner join EmployeeReportsTo ert on ert.EmployeeId = e.Id 
     inner join Employee r on ert.ManagerId = r.Id 
where 
    e.CompanyId = 1 
+0

У меня было это, но я ждал неоднозначности. – gcochard

Смежные вопросы