mysql - 查找所有不相关的行

标签 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,则返回用户。

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

最佳答案

那么您想要所有根本没有角色的用户吗?以下将做到这一点:

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/

相关文章:

many-to-many - SQLAlchemy 多对多动态集合类关系

mysql - 是否可以在列大小不匹配的情况下创建外键

mysql - 删除大约 50,000 行而不会出现 505 错误

sql - 与外键数组相比,联结表的性能权衡?

java - Hibernate 多对多关联 : left hand side collection contains elements, 但右侧集合为空

php - symfony 2 多对多关系的固定装置

php - Symfony2,创建querybuilder where子句,不为空或不为空

MySQL 使用 CASE AND Group By 进行选择

php - mysql_fetch_array 不检索所有行

forms - 如何按照实体之间的多对多关系将默认值设置为连接用户之后的 symfony 表单字段(用户字段)