sql - 寻找永远在一起的员工
问题描述
我在公司数据库上有一项家庭作业,其关系如下:
Employee(eid,ename,salary,did,classification) - primary key is eid
Project(pid,pname,did,budget,duedate) - primary key is pid
Onproject(pid,eid,fdate) - primary key is (pid,eid)
还有更多的关系,但我认为它们不相关(department,budget)
。
我需要找到并显示总是在做同样的项目(总是在一起)的工人 id(eid)。我只需要显示每一对。
我正在尝试这个:
SELECT
DISTINCT (e1.eid , e2.eid)
FROM
employee as e1 , employee as e2
WHERE
e1.eid<>e2.eid
AND e1.eid in
(SELECT eid,pid as A from onproject where pid IN(
(select pid as B from onproject where eid = e2.eid )INTERSECT (select pid as AB from onproject where eid = e1.eid)))
AND
e2.eid in
(SELECT eid,pid as C from onproject where pid IN
((select pid as D from onproject where eid = e1.eid) intersect (select pid as AC from onproject where eid = e2.eid)))
解决方案
嗯。. . 想到自加入和聚合:
select op1.eid, op2.eid
from onproject op1 join
onproject op2
on op1.pid = op2.pid and op1.eid < op2.eid
group by op1, op2
having count(*) = (select count(*) from onproject op where op.eid = op1.eid) and
count(*) = (select count(*) from onproject op where op.eid = op2.eid);
如果onproject
给定项目中给定员工的重复项,则需要使用count(distinct)
s 稍微修改查询。
推荐阅读
- python - 如何使用游戏列渲染块?
- mysql - 如何使用 DataDog 中自定义 SQL 查询的附加信息创建自定义指标?
- c# - 如何在函数中动态传递资源键值 - C#
- python - SMTP 以密件抄送而不是 TO 发送电子邮件
- .net-core - 在 .NET 5 控制台应用程序中使用 Windows 凭据管理器进行 SQL 连接
- css-modules - 如何在嵌套选择器中跨 css 模块重用 css 属性?
- c# - C# 滚动条延迟
- c# - 在 Azure 上的应用程序预热期间响应 Web 请求
- asp.net-core-webapi - GetWindowThreadProcessId 不使用 .net5.0 API 返回进程 ID
- autodesk-forge - Autodesk forge 配置器发明者添加新模型授权错误