如何查询MySQL数据库以返回仍未分配的角色(如他可用)。
使用表user_roles:
|user_id|role_id|
| 1 | 1 |
| 1 | 2 |
| 1 | 4 |
| 1 | 7 |
如何查询角色表以返回未分配的所有角色的角色名称和ID。 role_id:3,5,8,...
答案 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)
注意:这比接受的答案要快得多,因为它只运行子查询一次而不是角色中的每一行。