2014-12-03 151 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