MySQL:选择只有两行的所有行,并使用特定值?
我想抓住所有只有两个角色的用户,即1和4 一个用户角色的存储方式如下: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
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这很好。谢谢你介绍我这个解决方案,这太好了。感谢您为我介绍此解决方案