我在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/

10-10 22:07