Mub*_*bas 2 sql database oracle sql-match-all
考虑两个table.Employee和Project.Employee表有像eid,ename这样的字段.项目表有像pid,pname.Now这样的字段,因为员工可以处理很多项目而且项目可以由很多员工完成,因此,很明显b/w两个表有多对多关系.打破多对多,并创建一个名为Assignment的新表,其中包含eid和pid的外键.
这就有一个问题,我想找出谁已经在超过1 project.For例如相互合作,如果EMP A和EMP乙双方相互在一个以上的项目工作的员工对那么他们有资格获得上述查询结果.
请告诉我对上述问题的查询.
这是一个非常常见且简单明了的解决方案:
SELECT a1.eid, a2.eid
FROM Assignment a1
JOIN Assignment a2 ON (a1.eid < a2.eid AND a1.pid = a2.pid)
GROUP BY a1.eid, a2.eid
HAVING COUNT(*) > 1;
Run Code Online (Sandbox Code Playgroud)
此查询执行连接以将Assignment表中的行与同一项中具有相同项目和不同员工的其他行匹配.我们<用来比较员工ID,所以我们不会得到重复的配对.
然后我们GROUP BY用来确保每对员工只有一行.
该HAVING子句仅选择具有多行的组,这些组是一起处理多个项目的员工对.
| 归档时间: |
|
| 查看次数: |
393 次 |
| 最近记录: |