2011-10-29 23 views
2
SELECT user_id FROM user_accounts 
INNER JOIN roles_users 
ON (user_accounts.user_id = roles_users.user_id) 
WHERE roles_users.role_id IN (1) 

是我試過的。僅在SQL中有一個用戶角色時選擇

我想要的是選擇所有用戶user_id,這只是一個用戶(role_id 1)。在我的應用程序中,每個人都有role_id 1,然後,如果他們是合作伙伴,管理員等,那麼他們的user_id和role_id都是2,3,4。

那麼我怎麼能選擇所有用戶user_id,只有在role_users 1行,與role_id 1?

MySQL的

+0

檢查我對這個帖子的回答:http://stackoverflow.com/questions/6005240/best-way-to-implement-permissions/6005488#6005488 – dqhendricks

回答

1
SELECT user_accounts.user_id, COUNT(roles_users.user_id) AS cnt 
FROM user_accounts 
INNER JOIN roles_users ON (user_accounts.user_id = roles_uers.user_id) 
GROUP BY user_id 
HAVING (cnt = 1) 
0

您可以使用GROUP BY與限制到只有一行結果的HAVING條款:

SELECT user_accounts.user_id FROM user_accounts 
INNER JOIN roles_users 
ON (user_accounts.user_id = roles_users.user_id) 
WHERE roles_users.role_id = 1 
GROUP BY user_accounts.user_id 
HAVING COUNT(user_accounts.user_id) = 1 
0

如何像這樣

SELECT user_id 
FROM roles_users 
GROUP BY user_id 
HAVING COUNT(*) = 1 and MIN(role_id) = 1 

你也可以這樣寫:

SELECT user_id 
FROM roles_users RU 
WHERE role_id = 1 
AND NOT EXISTS(SELECT * FROM roles_users WHERE role_id <> 1 and user_id = RU.user_id) 
相關問題