2010-01-15 45 views
0

如何查詢MySQL數據庫以返回尚未分配的角色(如可用於他)。獲取尚未分配給成員查詢的角色

隨着表user_roles:

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

我如何可以查詢角色表返回未分配的所有角色的角色名稱和編號。 ROLE_ID:3,5,8,...

回答

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 
) 
+0

謝謝!非常感謝 – LukeP 2010-01-15 19:42:03

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) 

注:這要快得多比接受的答案,因爲它只運行子查詢一次,而不是每個角色的行。

+0

這隻返回沒有分配給任何人的角色 – LukeP 2010-01-15 19:42:38

+0

這就是你要求的。 「我如何查詢角色表以返回未分配的所有角色的角色名稱和ID。」 – Hogan 2010-01-15 20:03:00

+0

請參閱上文未分配給用戶1 - 也是我的筆記。 – Hogan 2010-01-15 20:07:50

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; 
相關問題