2015-09-08 2 views
0

Рассмотрим таблицы:Получить свойство первой таблицы в LEFT JOIN запрос

Worker 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 JOIN в Worker:

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 
Смежные вопросы