仅在SQL中有一个用户角色时选择

时间:2011-10-29 18:37:56

标签: php sql

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)

是我尝试过的。

我希望选择所有用户user_id,它们只是一个用户(role_id 1)。在我的应用程序中,每个人都有role_id 1,然后他们获得了一个新行,其user_id和role_id为2,3,4,如果他们是合作伙伴,管理员等等。

那么如何选择在role_users中只有1行的所有用户user_id,其中role_id为1?

的MySQL

3 个答案:

答案 0 :(得分: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)

答案 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

答案 2 :(得分: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)