2015-09-08 24 views
0

考慮表:獲取第一個表的屬性在LEFT JOIN查詢

工人 enter image description here

和WorkersBosses(多對多)

enter image description here

我怎樣才能得到所有僱員與他們的老闆(如果一個工人有一個老闆,所以把它放在他身邊,否則就是放一個空)。

有了這個:

SELECT TOP 1000 [EmployeeName] ,workboss.bossid 
    FROM [TestingDB].[dbo].[Worker] as workers 
    LEFT OUTER JOIN [TestingDB].[dbo].[WorkersBosses] as workboss 
    on workers.EmployeeId = workboss.WorkerId 

我得到的所有與他們的老闆的員工,但我怎麼能得到也是老闆的名字(不只是他的ID)?

感謝

回答

1

添加INNER JOINWorker

SELECT 
    w.EmployeeName AS EmployeeName, 
    wb.BossName 
FROM Worker w 
LEFT JOIN(
    SELECT b.WorkerId, b.BossId, w2.EmployeeName AS BossName 
    FROM WorkersBoss b 
    INNER JOIN Worker w2 
     ON w2.EmployeeId = b.BossId 
)wb 
    ON w.EmployeeId = wb.WorkerId 

這也可以寫成:

SELECT 
    w.EmployeeName AS EmployeeName, 
    w2.EmployeeName AS BossName 
FROM Worker w 
LEFT JOIN WorkersBosses wb 
    INNER JOIN Worker w2 
     ON w2.EmployeeId = wb.BossId 
    ON w.EmployeeId = wb.WorkerId 
1

您只需通過使用不同的別名多次加入相同的表:

SELECT w.EmployeeId, 
    w.EmployeeName, 
    b.EmployeeId AS BossEmployeeId, 
    b.EmployeeName AS BossEmployeeName 
FROM Worker w 
LEFT JOIN WorkersBosses wb 
    ON wb.WorkerId = w.EmployeeId 
LEFT JOIN Worker b 
    ON b.EmployeeId = wb.BossId