获取仍未分配给成员查询的角色

时间:2010-01-15 18:26:30

标签: sql mysql roles

如何查询MySQL数据库以返回仍未分配的角色(如他可用)。

使用表user_roles:

|user_id|role_id|
|   1   |   1   |
|   1   |   2   | 
|   1   |   4   |
|   1   |   7   |

如何查询角色表以返回未分配的所有角色的角色名称和ID。 role_id:3,5,8,...

3 个答案:

答案 0 :(得分:2)

尝试

SELECT *
FROM roles r
WHERE NOT EXISTS (
   SELECT 1
   FROM user_roles ur
   WHERE ur.role_id = r.id
   AND ur.user_id = 1
)

答案 1 :(得分:1)

我更喜欢使用外连接而不是相关或非相关子查询来进行这种set-complement查询。

SELECT r.id
FROM roles r
LEFT OUTER JOIN user_roles u 
  ON r.id = u.role_id AND u.user_id = 1
WHERE u.role_id IS NULL;

答案 2 :(得分:0)

SELECT * 
FROM roles 
WHERE roles.id NOT IN (SELECT distinct role_id FROM user_roles)

如果您希望角色未分配给用户1。

SELECT * 
FROM roles 
WHERE roles.id NOT IN (SELECT distinct role_id FROM user_roles WHERE NOT user_ID = 1)

注意:这比接受的答案要快得多,因为它只运行子查询一次而不是角色中的每一行。