MySQL:选择只有两行的所有行,并使用特定值?

MySQL:选择只有两行的所有行,并使用特定值?,mysql,Mysql,我想抓住所有只有两个角色的用户,即1和4 一个用户角色的存储方式如下: user_id role_id 54321 1 54321 4 54322 1 54323 1 因为它只有两个角色,而这两个角色是1和4,所以我如何进行获取用户_id 54321的查询 我可以使用(1,4)中的WHERE role_id,但这也会抓取具有其他角色的用户 WHERE role_id IN (1, 4) GROUP BY user_ID HAVING COUNT(DISTINCT role_id

我想抓住所有只有两个角色的用户,即1和4

一个用户角色的存储方式如下:

user_id role_id
54321   1
54321   4
54322   1
54323   1
因为它只有两个角色,而这两个角色是1和4,所以我如何进行获取用户_id 54321的查询

我可以使用(1,4)中的WHERE role_id,但这也会抓取具有其他角色的用户

WHERE role_id IN (1, 4) GROUP BY user_ID HAVING COUNT(DISTINCT role_id) = 2


这是集合内集合查询的一个示例。我喜欢通过
分组
拥有
来解决这些问题,因为这是最普遍的方法:

select user_id
from user_roles ur
group by user_id
having sum(role_id = 1) > 0 and
       sum(role_id = 4) > 0 and
       sum(role_id not in (1, 4)) = 0;
having
子句有三个条件。第一个计算角色为1的次数,如果至少有一个这样的角色,
user\u id
将通过。第二个对4也一样。最后一次检查是否没有其他值

我喜欢这种结构,因为它很灵活。如果条件是1和4,而其他条件是允许的,那么您只需删除第三条。如果条件为1或4,并且没有其他条件,则它将如下所示:

having (sum(role_id = 1) > 0 or
        sum(role_id = 4) > 0
       ) and
       sum(role_id not in (1, 4)) = 0;

这是集合内集合查询的一个示例。我喜欢通过
分组
拥有
来解决这些问题,因为这是最普遍的方法:

select user_id
from user_roles ur
group by user_id
having sum(role_id = 1) > 0 and
       sum(role_id = 4) > 0 and
       sum(role_id not in (1, 4)) = 0;
having
子句有三个条件。第一个计算角色为1的次数,如果至少有一个这样的角色,
user\u id
将通过。第二个对4也一样。最后一次检查是否没有其他值

我喜欢这种结构,因为它很灵活。如果条件是1和4,而其他条件是允许的,那么您只需删除第三条。如果条件为1或4,并且没有其他条件,则它将如下所示:

having (sum(role_id = 1) > 0 or
        sum(role_id = 4) > 0
       ) and
       sum(role_id not in (1, 4)) = 0;

我这样做:“选择users.id FROM users internal JOIN roles\u users ON users.id=roles\u users.user\u id WHERE roles\u users.role\u id IN(1,2)GROUP BY users.id have COUNT(DISTINCT role\u id)=2”-不起作用WHERE role\u id我想是,而不是用户id而不是用户。id?对不起,我不明白?从用户内部选择users.user\u id加入用户上的角色用户。user\u id=角色\u users.user\u id WHERE role\u id在(1,2)用户组中。user\u id有计数(不同的角色\u id)=2它是users.id不是users.user\u id,这只是我在问题中的例子。仍然无法使用计数(不同角色\u id)=2我这样做:“从用户中选择users.id内部加入用户上的角色\u users.id=角色\u users.user\u id,其中(1,2)组中的角色\u users.role\u id由用户进行。具有计数的id(不同角色\u id)=2”-不起作用WHERE role\u id我想是,而不是用户id而不是用户。id?对不起,我不明白?从用户内部选择users.user\u id加入用户上的角色用户。user\u id=角色\u users.user\u id WHERE role\u id在(1,2)用户组中。user\u id有计数(不同的角色\u id)=2它是users.id不是users.user\u id,这只是我在问题中的例子。仍然无法使用COUNT(不同角色_id)=2这很好。谢谢你介绍我这个解决方案,这太好了。感谢您为我介绍此解决方案