我在mysql中有三个表
组,groups_rights,权利
结构如下
团体
id | name
----------
1 | Professionnel
2 | Surgerysync
权利
id | name
----------
11 | USERS-ACCESS
12 | PANEL-ACCESS
13 | MEMBER
groups_rights
id | group_id | right_id
--------------------
1 | 1 | 11
2 | 2 | 11
3 | 1 | 12
4 | 1 | 13
5 | 2 | 13
我想查询以获取不具有PANEL-ACCESS权限的组。
SELECT `groups`.`name`, `groups`.`id` FROM (`groups`) JOIN `groups_rights` ON `groups_rights`.`group_id` = `groups`.`id` JOIN `rights` ON `rights`.`id` = `groups_rights`.`right_id` WHERE `rights`.`id` NOT IN (11);
我正在使用上面的查询,但是我都将两个组作为结果。
什么是正确的查询以仅获取没有PANEL-ACCESS的组。
最佳答案
首先,您的PANEL-ACCESS ID为12,因此您应该使用NOT IN (12)
其次,不要使用right.id来引用很多麻烦的right.id。
最后,获取具有PANEL-ACCESS的组的列表,并查找该列表中不存在的组。这是适用于没有PANEL-ACCESS的组的查询。
SELECT `groups`.`name`, `groups`.`id` FROM (`groups`)
where `groups`.`id` not in (
SELECT `groups`.`id` FROM (`groups`)
JOIN `groups_rights` ON `groups_rights`.`group_id` = `groups`.`id`
JOIN `rights` ON `rights`.`id` = `groups_rights`.`right_id`
WHERE `rights`.`name` = 'PANEL-ACCESS');
关于mysql - mysql获取具有特定权限的组列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29314310/