2016-05-07 28 views
1

我有一個名爲Staff的表,其中包含以下字段:idStaff, Name, Phone, Email, SupervisorId對MySQL中的同一表使用子查詢

SuervisorId是該職員的主管的idStaff

我想顯示所有員工的名單及其基本信息(姓名,電子郵件等)以及他們的主管的名字。

因此,像這樣:

select idStaff 
    , Name 
    , Email 
    , Phone 
    , (select Name from Staff where idStaff = SupervisorId) as SupervisorName 
    from Staff 
order 
    by Name ASC 

查詢不起作用。我嘗試加入這兩個表,但我很困惑如何從聯接中的子查詢中獲取名稱。

select idStaff 
     , Name 
     , Phone 
     , Email 
    from Staff a 
    inner 
    join Staff b 
    on a.idStaff = b.SupervisorId 
    order 
    by Name ASC 

任何幫助將不勝感激。

回答

1

也許是這樣的....

select s1.idStaff 
    , s1.Name 
    , s1.Email 
    , s1.Phone 
    , s2.Name as SupervisorName 
from Staff s1 
LEFT JOIN Staff s2 ON s1.SupervisorId = s2.idStaff 
order 
    by s1.Name ASC 

,或者你可以做類似的東西....

select s.idStaff 
    , s.Name 
    , s.Email 
    , s.Phone 
    , (select top 1 m.Name from Staff m 
          where s.SupervisorId = m.idStaff) as SupervisorName 
from Staff s 
order by s.Name ASC 
+0

謝謝,第一個解決方案工作,但如果我想做另一個左連接怎麼辦?所以在Staff中有另一個名爲RoleId的字段,它查找Role表。我想從角色表中獲取RoleName,其中idRole = RoleId – codeinprogress

+0

Nevermind,我找到了。感謝您的幫助。 – codeinprogress

0

LEFT JOIN是你的朋友。試試像這樣的查詢。看看別名S(塔夫)和M(恩伯)

SELECT m.idStaff 
    , m.Name 
    , m.Email 
    , m.Phone 
    , s.Name 
    FROM Staff m 
    LEFT JOIN Staff s ON s.idStaff = m.SupervisorId 
    ORDER BY m.Name ASC; 
相關問題