2014-12-03 150 views
0

我有一个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

所以你想要所有没有任何作用的用户?以下将做到这一点:

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` 
+0

嗨,不,我希望所有与某个特定角色无关的用户。在例如角色与id 2.所以,是的,我想找到所有不在角色2的用户! – Torben 2014-12-03 15:52:02

+0

编辑回答这个问题:) – 2014-12-03 15:59:03

+0

是的,它的工作,非常感谢你:) – Torben 2014-12-03 16:03:10