我有一个像这样的行的表:
+-------------+---------+
| employee_id | role_id |
+-------------+---------+
| 850 | 10 |
| 850 | 20 |
| 850 | 30 |
| 850 | 40 |
| 851 | 10 |
| 851 | 20 |
| 851 | 40 |
| 852 | 10 |
| 852 | 30 |
+-------------+---------+
员工不能多次拥有相同的角色,因为employee_id和role_id组合起来形成此关联表的主键。
我正在尝试选择与ID 20,30和40配对的所有employee_ids。换句话说,我希望所有employee_ids都拥有所有这三个角色。在上面的表中,它只是employee_id 850.这对我来说有点棘手,因为我希望获得与此匹配的所有employee_ids,而不仅仅是一个。
除了我的主要问题,我试图最终将所有这三个角色合并为一个新角色,角色90.在上面的例子中,第二,第三和第四行将被删除并替换为一个(850,90)就可以了。
谢谢!
答案 0 :(得分:2)
这是set-within-sets查询。这是一个解决方案:
select employee_id
from atable
where role_id in (20, 30, 40)
group by employee_id
having count(distinct role_id) = 3;
答案 1 :(得分:1)
select employee_id from empl,
(select employee_id e1 from empl where role_id=30) m,
(select employee_id e2 from empl where role_id=40) n
where empl.role_id=20 and employee_id=m.e1 and employee_id=n.e2