如何选择与值列表中的每个值配对的值

时间:2014-07-29 19:33:44

标签: mysql sql

我有一个像这样的行的表:

+-------------+---------+
| 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)就可以了。

谢谢!

2 个答案:

答案 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