我有一个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,则返回用户。
但我希望在一个查询中检查所有相关的行,如果可能的话?
答案 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`