查找所有不相关的行

时间:2014-12-03 15:43:16

标签: mysql many-to-many

我有一个User MySql表和一个Role表。它们与Relation_RoleUser表(many_to_many)相关。

我的问题是,当我想找到与特定角色无关的所有行(用户)时。在以下代码中,我尝试查找没有role.id = 2的所有用户:

SELECT * FROM `User` `U` 
LEFT JOIN `Relation_RoleUser` ON U.id = Relation_RoleUser.User_id
WHERE Relation_RoleUser.User_id IS NULL OR Relation_RoleUser.Role_id <> 2
GROUP BY `U`.`id`

但MySql只查找Relation_RoleUser中的一个相关行,如果不存在相关行或者第一个找到的行的Role_id不是2,则返回用户。

但我希望在一个查询中检查所有相关的行,如果可能的话?

1 个答案:

答案 0 :(得分:1)

所以你想要所有没有角色的用户?以下是:

SELECT * FROM `User` `U` 
LEFT JOIN `Relation_RoleUser` ON U.id = Relation_RoleUser.User_id
WHERE Relation_RoleUser.User_id IS NULL
GROUP BY `U`.`id`

编辑:对不起,我得到你现在要问的内容。这应该可以为您提供您期望的结果:

SELECT * FROM `User` `U` 
LEFT JOIN `Relation_RoleUser` ON U.id = Relation_RoleUser.User_id AND Relation_RoleUser.Role_id = 2
WHERE Relation_RoleUser.User_id IS NULL 
GROUP BY `U`.`id`