在部门的所有项目中工作的员工
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在部门的所有项目中工作的员工相关的知识,希望对你有一定的参考价值。
这是我的数据库:
- 员工(id,department_id,姓名)
- 部门(身份证,姓名)
- 项目(id,dep_id)
- 工作(employee_id,project_id)
使用PK,FK(例如:员工有PK ID和部门的FK departament_id(id))
我想选择在某个部门的所有项目中工作的所有员工(E.name)(例如,开发)。
这是我的查询:
SELECT E.name,
COUNT(P.id) AS PW,
AVG(DISTINCT(Q.allproj)) AS PrjOfDep
FROM Employee E
JOIN WORK W
ON W.employee_id= E.id
JOIN Project P
ON P.id = W.project_id
JOIN (SELECT D.id,
COUNT(P1.id) AS allproj
FROM Project P1
JOIN Department D
ON P1.departament_id = D.id
AND D.name = "Development"
GROUP BY D.id) Q ON P.departament_id = Q.id
GROUP BY E.ID HAVING PW = PrjOfDep
这有点工作,这是结果:
Name PW PrjOfDep
Stark 2 2.0000
Mike 2 2.0000
我不知道如何检查Employee E工作的所有项目是否包括所有“开发”项目,所以我做了一个技巧,我的查询看起来非常难看。我统计了员工E在开发中工作的所有项目,并将其与Departament“Development”项目的数量进行了比较。
PrjOfDep是一个平均值,我做了这个丑陋的技巧,因为查询
SELECT E.name,
COUNT(P.id) AS PW
FROM Employee E
JOIN WORK W
ON W.employee_id = E.id
JOIN Project P
ON P.id= W.project_id
JOIN (SELECT D.id,
COUNT(P1.id) AS allproj
FROM Project P1
JOIN Department D
ON P1.departament_id= D.id
AND D.name = "Development"
GROUP BY D.id) Q
ON P.departament_id= Q.id
GROUP BY E.id HAVING PW = Q.allproj
给我错误:
1054 - Unknown column 'Q.allproj' in 'having clause'
我想要一个更优雅的查询我的问题,我想只看到员工的名字。谢谢!
答案
你的尝试似乎试图做的比你提出的要多得多。如果你的问题只是如何
选择在某个部门的所有项目中工作的所有员工(E.name)(例如,开发)。
然后像下面这样的东西应该工作:
SELECT e.name
FROM Employee e
INNER JOIN Work w ON e.eid = w.eid
INNER JOIN Project p ON w.pid = p.pid
INNER JOIN Department d ON p.did = d.did
WHERE d.Deptname = "Development"
GROUP BY e.name
HAVING COUNT(p.Projname) = (SELECT count(p.Projname)
FROM Department d
INNER JOIN Project p ON d.did = p.did
WHERE d.Deptname = "Development")
演示:SQL Fiddle
另一答案
这是我的解决方案
SELECT
EMP.*
FROM Employee EMP
JOIN Department DEP
ON 1 = 1
AND DEP.did = EMP.did
WHERE 1 = 1
AND DEP.Deptname = 'Development'
AND EMP.eid NOT IN(
SELECT DISTINCT
DEPEMP.eid
FROM Employee DEPEMP
JOIN Project PRO
ON 1 = 1
AND PRO.did = DEPEMP.did
LEFT JOIN Work WRK
ON 1 = 1
AND WRK.eid = DEPEMP.eid
AND WRK.pid = PRO.pid
WHERE 1 = 1
AND DEPEMP.did = DEP.did
AND WRK.eid IS NULL
);
可悲的是,解决方案并不那么优雅。尝试一下here
以上是关于在部门的所有项目中工作的员工的主要内容,如果未能解决你的问题,请参考以下文章
如何创建在 Visual Studio Code 中工作的 Java / Maven 项目?