0

私が書いたクエリの助けが必要です:

私は3つのテーブルを持っています

会社

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

これを行うためにクエリを変更する良い方法は何ですか?クエリがあり、それらの結果を取得して、その結果セットに対して2番目のクエリを実行します(これは過度に不要です)。

4

1 に答える 1

4

従業員が 1 人だけに報告すると仮定すると、(リンク テーブルなし)

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
于 2012-06-14T17:51:30.220 に答える