我有一个 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,则返回用户。
但我希望在一个查询中检查所有相关行(如果可能的话)?
最佳答案
那么您想要所有根本没有角色的用户吗?以下将做到这一点:
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`
关于mysql - 查找所有不相关的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27275799/