Mysql 如何在值列表中选择与每个值成对的值

Mysql 如何在值列表中选择与每个值成对的值,mysql,sql,Mysql,Sql,我有一个表,其中的行如下: +-------------+---------+ | employee_id | role_id | +-------------+---------+ | 850 | 10 | | 850 | 20 | | 850 | 30 | | 850 | 40 | | 851 | 10 | | 851 | 20 | |

我有一个表,其中的行如下:

+-------------+---------+
| employee_id | role_id |
+-------------+---------+
|         850 |      10 |
|         850 |      20 |
|         850 |      30 |
|         850 |      40 |
|         851 |      10 |
|         851 |      20 |
|         851 |      40 |
|         852 |      10 |
|         852 |      30 |
+-------------+---------+
员工不能多次拥有相同的角色,因为员工id和角色id组合形成此关联表的主键

我正在尝试选择与ID 20、30和40配对的所有员工ID。换句话说,我希望所有员工ID都具有这三个角色。在上表中,只有员工id 850。这对我来说有点棘手,因为我想得到所有与此匹配的员工ID,而不仅仅是一个

除了我的主要问题之外,我正试图最终将这三个角色合并为一个新角色,即角色90。在上述情况下,将删除第二行、第三行和第四行,并将其替换为具有(850、90)的行


谢谢

这是一个集合内集合查询。以下是一个解决方案:

select employee_id
from atable
where role_id in (20, 30, 40)
group by employee_id
having count(distinct role_id) = 3;

这是一个集合内集合查询。以下是一个解决方案:

select employee_id
from atable
where role_id in (20, 30, 40)
group by employee_id
having count(distinct role_id) = 3;

这是一个集合内集合查询。以下是一个解决方案:

select employee_id
from atable
where role_id in (20, 30, 40)
group by employee_id
having count(distinct role_id) = 3;

这是一个集合内集合查询。以下是一个解决方案:

select employee_id
from atable
where role_id in (20, 30, 40)
group by employee_id
having count(distinct role_id) = 3;

那么,您想要角色id为20、30或40的所有员工id?对不起,我想要所有拥有这三个角色的员工id,而不仅仅是其中一个。一名员工是否可能拥有多个相同的角色id?换句话说,角色id为10、10和20的853是否适合您的数据集?@Jenn No,因为员工id和角色id一起构成一个复合键。853不可能有10次。谢谢。那么您想要角色id为20、30或40的所有员工id?对不起,我想要所有具有所有三个角色的员工id,而不仅仅是其中一个。一名员工是否可能具有多个相同角色id?换句话说,角色id为10、10和20的853是否适合您的数据集?@Jenn No,因为员工id和角色id一起构成一个复合键。853不可能有10次。谢谢。那么您想要角色id为20、30或40的所有员工id?对不起,我想要所有具有所有三个角色的员工id,而不仅仅是其中一个。一名员工是否可能具有多个相同角色id?换句话说,角色id为10、10和20的853是否适合您的数据集?@Jenn No,因为员工id和角色id一起构成一个复合键。853不可能有10次。谢谢。那么您想要角色id为20、30或40的所有员工id?对不起,我想要所有具有所有三个角色的员工id,而不仅仅是其中一个。一名员工是否可能具有多个相同角色id?换句话说,角色id为10、10和20的853是否适合您的数据集?@Jenn No,因为员工id和角色id一起构成一个复合键。853不可能有10次。谢谢