MSSQL查询多对多关系

时间:2017-01-11 09:23:26

标签: sql sql-server tsql join many-to-many

我有一个奇怪的场景,有4个表,有很多关系。以下是我的表格:

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

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

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

这是一个多对多的表1员工可能属于1个以上的部门

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

这也是许多人,其中1名员工可能是一个以上项目的一部分而不管部门。

dept和project之间没有映射。

我需要从depts分组的所有depts中获取员工所属项目的所有项目的详细信息。我完全迷失了编写查询。我所能写的只是

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

我缺少的是deptID,我该如何包含此内容?

Example data shown here

1 个答案:

答案 0 :(得分: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

只需在组中添加列,然后在选择列表中选择所需的列表。