选择用户角色1和2 SQL查询的位置

时间:2011-10-19 19:57:26

标签: php mysql sql

以下是我现在所得到的,它无法正常工作,因为它会检查一行有两个不同的值。

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中有一行的所有用户,这些用户拥有第一行,然后是两行,这就是为什么我没有得到结果而且它不起作用的原因。那我怎么能这样做呢?

3 个答案:

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