2016-04-10 25 views
0

比方說,我們有員工表獲得自我引用列

+----+------+--------------+--------------+ 
| Id | Name | SupervisorId | IsSupervisor | 
+----+------+--------------+--------------+ 

,監事表

+----+---------+ 
| Id | Section | 
+----+---------+ 

而且我想要的是讓這個表

+------------+--------------+--------------+----------------+ 
| EmployeeID | EmployeeName | SupervisorId | SupervisorName | 
+------------+--------------+--------------+----------------+ 

主管應該是空的如果不存在

我的查詢結束了與類似與問號此行是一頂帽子需要更換

Select 
    employees.Id as EmployeeID, 
    employees.Name as EmployeeName, 
    supervisors.Id as SupervisorId, 
    supervisors.Name as SupervisorName # ??? 
From 
    employees Left Join 
    supervisors 
    On employees.SupervisorId = supervisors.Id 
+0

supervisors表沒有名稱列!! ?? –

+0

@AbdullahWasi不,您需要通過檢查IsSupervisor列 – Almis

+0

來獲取員工表中的名稱,它看起來是多餘的:如果員工可以成爲主管,那麼'EmployeeName'和'SupervisorName'將是相同的。有什麼好處? – RomanPerekhrest

回答

1

嘗試這樣的事情,讓主管的姓名了員工(E2)表。

Select 
    E.Id as EmployeeID, 
    E.Name as EmployeeName, 
    S.Id as SupervisorId, 
    E2.Name as SupervisorName 
From 
    Employees E 
    Left Join 
    Supervisors S On E.SupervisorId = S.Id 
    Left Join 
    Employees E2 On E2.Id = S.Id 
+0

我想你可能需要讓內連接也是一個左連接。 – trincot

+0

@trincot這很有道理,謝謝。固定! –