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