以下是我现在所得到的,它无法正常工作,因为它会检查一行有两个不同的值。
SELECT users.*
FROM users INNER JOIN roles_users ru ON users.id = ru.user_id
WHERE ru.role_id = 1 AND ru.role_id = 2
我想选择在roles_users中有两行的所有用户。一行role_id应该有一个,第二行应该有role_id两个。
因此,请选择roles_users中有两行的所有用户,其中一行有role_id = 1
,另一行有role_id = 2
。
上面的查询选择在roles_users中有一行的所有用户,这些用户拥有第一行,然后是两行,这就是为什么我没有得到结果而且它不起作用的原因。那我怎么能这样做呢?
答案 0 :(得分:5)
SELECT users.id
FROM users INNER JOIN roles_users ON users.id = roles_users.user_id
WHERE roles_users.role_id IN (1, 2)
GROUP BY users.id
HAVING COUNT(*) = 2
答案 1 :(得分:0)
为什么不两次加入roles_users?丙氨酸:
SELECT users.* FROM users
INNER JOIN roles_users ru1 ON users.id = ru1.role_id AND ru1.role_id = 1
INNER JOIN roles_users ru2 ON users.id = ru2.role_id AND ru2.role_id = 2
答案 2 :(得分:0)
您需要获得具有所需角色的用户的(不同)列表。试试这个:
SELECT users.{column_list}
FROM users as a
JOIN (SELECT user_id
FROM roles_users
WHERE role_id IN (1, 2)
GROUP BY user_id
HAVING COUNT(DISTINCT role_id) = 2) required_role
ON required_role.user_id = users.id