2017-01-11 249 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

正确我需要编辑答案 –