有一张user表一张group表一张user跟group的关联表user_groupuser_group表通过user跟group两张表id数据做关联一张right表一张group_right表roup_right表通过right表跟group表id数据做管理。现有user表id的列表数据和right表的权限列表数据需要编写sql过滤出有全部权限的userid
假设user表的主键是user_id,group表的主键是group_id,right表的主键是right_id。
首先,我们需要找到具有全部权限的right_id列表。可以通过以下SQL语句实现:
SELECT right_id
FROM right
假设我们得到的全部权限的right_id列表是 [1, 2, 3]。
接下来,我们可以通过以下SQL语句来找到具有全部权限的user_id:
SELECT user_id
FROM user
WHERE user_id IN (
SELECT user_id
FROM user_group
WHERE group_id IN (
SELECT group_id
FROM group_right
WHERE right_id IN (1, 2, 3)
GROUP BY group_id
HAVING COUNT(DISTINCT right_id) = 3
)
)
注意,这里的3是指全部权限的数量,如果全部权限的数量变化,需要相应地修改SQL语句中的数字。
这样,就可以得到具有全部权限的user_id列表
原文地址: https://www.cveoy.top/t/topic/iZfQ 著作权归作者所有。请勿转载和采集!