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次。谢谢