2017-01-11 256 views
0

我有一個奇怪的場景與4個表與多對多的關係。下面是各表有:多對多關係MSSQL查詢

Employee 
-------- 
EmpId (Pk) 
Name 

Dept 
-------- 
DeptId (Pk) 
Name 

EmpDept 
--------- 
EmpId (pk) 
DeptId (pk) 

這是一個多對多表1僱員可能屬於不止1個系

Project 
--------- 
ProjId (Pk) 
EmpId (pk) 

這也是很多很多,其中1名員工可以成爲其中的一部分不管部門多於一個項目。

部門和項目之間沒有映射。

我需要得到所有項目的詳細信息,員工是所有按部門分組的部分項目。我完全失去了寫查詢的能力。我能寫的是

select * 
from Project 
where empId in (select empid from EmpDept) 

我所缺少的是deptID,我怎麼能包括這個?

Example data shown here

+0

你可以去DEPTID使用EMPID在EMPDEPT表表通過加入條件 –

+5

請張貼的數據集,並希望結果集 –

+0

看看[如何創建一個最小的,完整的,並且可驗證的示例](HTTP://計算器.com/help/mcve),並嘗試在你的問題中包含一個mcve - 這意味着你會得到更高質量的答案。 – 3N1GM4

回答

0

您可以使用下面的代碼

Select P.Name,D.name,E.name from Project P 
join EmpDept Ep 
on P.EmpId=Ep.EmpId 
join Dept d 
on d.DeptId=p.EmpId 
group by d.name,P.Name,E.Name 

只需添加您在選擇列表中要在組和選擇列表的列。

+0

看起來您的連接中存在拼寫錯誤:「on P.EmpId = P.EmpId'應該是'on Ep.EmpId = P.EmpId',right ? – 3N1GM4

+2

爲什麼在沒有涉及集合函數時使用GROUP BY? – jarlh

+0

正確我需要編輯答案 –