如何查詢MySQL數據庫以返回尚未分配的角色(如可用於他)。獲取尚未分配給成員查詢的角色
隨着表user_roles:
|user_id|role_id|
| 1 | 1 |
| 1 | 2 |
| 1 | 4 |
| 1 | 7 |
我如何可以查詢角色表返回未分配的所有角色的角色名稱和編號。 ROLE_ID:3,5,8,...
如何查詢MySQL數據庫以返回尚未分配的角色(如可用於他)。獲取尚未分配給成員查詢的角色
隨着表user_roles:
|user_id|role_id|
| 1 | 1 |
| 1 | 2 |
| 1 | 4 |
| 1 | 7 |
我如何可以查詢角色表返回未分配的所有角色的角色名稱和編號。 ROLE_ID:3,5,8,...
嘗試
SELECT *
FROM roles r
WHERE NOT EXISTS (
SELECT 1
FROM user_roles ur
WHERE ur.role_id = r.id
AND ur.user_id = 1
)
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)
注:這要快得多比接受的答案,因爲它只運行子查詢一次,而不是每個角色的行。
我更喜歡通過使用外連接來完成這種補集查詢,而不是相關或不相關的子查詢。
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;
謝謝!非常感謝 – LukeP 2010-01-15 19:42:03