2014-01-30 4 views
-1

i`m new в SQL и мне нужен совет. У меня 2 таблицы (сотрудников и отделов),Мне нужен sql-запрос для объединения информации из 2 таблиц

сотрудника таблицы как E: идентификатор (INT), имя (NVARCHAR), пол (NVARCHAR), DepartmentID (INT), DateOfBirth (DateTime) отдела таблицы как D: dep_id (INT), имя (NVARCHAR), место нахождения (NVARCHAR), boss_id (интермедиат)

That`s то, что мне нужно в выходной таблице:

E.id/E.name/D.name/D.location/(и последнее, которое я не могу получить с простым объединением, - это :) D.boss.name (не простой идентификатор босса, а реальное имя сотрудника из таблицы E)

Просто вопрос для продвинутых людей :-)

+0

эээ ... запутался. В какой таблице находится имя boss_name? (d.boss.name подразумевает, что у вас есть столбец имен в таблице с именем boss в схеме «D» ... не кажется правильным) – Twelfth

+0

Я намеревался сказать, что имя босса находится в таблице employee. Boss_id показывает, какой сотрудник является боссом в отделе, а другие просто работники –

ответ

2

Присоединитесь к столу второй раз для босса. (Это предполагает, что boss_id FK, чтобы Employee)

SELECT 
    E.Id, 
    E.Name, 
    D.Name, 
    D.Location, 
    B.Name 
FROM Employee E 
    INNER JOIN Department D on E.DepartmentID = D.Dep_id 
    INNER JOIN Employee B ON D.Boss_id = B.Id 
+0

спасибо, что если я хочу добавить случай, который проверяет, является ли этот сотрудник боссом в этом отделе и изменяет значение на null или на строку «босс в» + d.name –

-1
SELECT e.Id, e.Name, d.Name, d.Location, 
(
SELECT e2.Name 
FROM tblEmployee as e2 
WHERE e2.id = d.boss_id 
) AS [Boss name] 
FROM tblEmployee as e 
INNER JOIN tblDepartment as d 
ON e.DepartmentID = d.dep_ID 
+0

Это просто конвертируется в левое соединение, так почему бы не написать его как левое соединение. Это чище. – EkoostikMartin

+0

спасибо за быстрый ответ –

0

Вы можете написать запрос с использованием CTE, а также:

WITH CTE AS(
Select 
e.ID, 
e.name, 
d.boss_id, 
d.Location as DepartmentLocation, 
d.name as DepartmentName 
From Employee e 
INNER JOIN Department d on d.boss_id =E.id 
) 
Select c.id, c.name, e.name as BossName, c.DepartmentLocation, c.DepartmentName 

from cte c 
Inner Join Employee e1 on e1.id=c.boss_id 
Смежные вопросы