MySQL/MariaDB如何筛选拥有全部指定权限的userId
查询拥有全部指定权限的用户ID(MySQL/MariaDB)
没问题,我来帮你搞定这个需求!要找出拥有权限ID 1到8全部权限的用户,核心思路是先锁定目标权限范围,再按用户分组统计权限数量,最后筛选出权限数量等于目标总数的用户。
解决方案SQL
SELECT userId FROM user2permission WHERE permissionId IN (1,2,3,4,5,6,7,8) GROUP BY userId HAVING COUNT(DISTINCT permissionId) = 8;
代码解释
WHERE permissionId IN (1,2,3,4,5,6,7,8):先过滤掉无关的权限记录,只保留我们关心的8个权限,减少后续统计的计算量GROUP BY userId:把同一个用户的所有权限记录归为一组,方便统计每个用户的权限情况HAVING COUNT(DISTINCT permissionId) = 8:统计每组中不同权限的数量(加DISTINCT是为了避免同一个用户重复拥有某条权限的情况,比如如果某个用户有两条permissionId=1的记录,也不会干扰统计结果),数量等于8的就是拥有全部目标权限的用户
用你提供的示例数据测试这条SQL,正好会返回userId=6,完全符合你的预期。
内容的提问来源于stack exchange,提问作者dom
相关产品推荐
相关产品推荐

