我有三个简单的表:基于多对多的组、权限和group_permissions。 我的问题是执行一个查询,给定组 ID (pk),将检索具有所有权限的结果集,包括与给定组关联的权限和与该组不关联的权限。
我尝试过类似的方法:
SELECT *
FROM permission
LEFT JOIN group_permissions ON group_permissions.permission_id = permission.id
LEFT JOIN group ON group_permissions.group_id = group.id
WHERE group.id = 123
但它就是不起作用......
有什么建议吗?
谢谢大家的回答,我在不到 30 分钟的时间内解决了我的问题!这不是东西吗?
SELECT *
FROM auth_permission
LEFT JOIN auth_group_permissions ON auth_group_permissions.permission_id = auth_permission.id AND auth_group_permissions.group_id = 123
LEFT JOIN auth_group ON auth_group.id = auth_group_permissions.group_id
最佳答案
正如各种评论中提到的,您不能在 WHERE 子句中测试 group.id 的值,因为它将否定 LEFT JOIN 并强制其行为类似于 INNER JOIN。
相反,使该测试成为 JOIN 条件的一部分:
SELECT *
FROM permission
LEFT JOIN group_permissions
ON group_permissions.permission_id = permission.id
LEFT JOIN `group`
ON group_permissions.group_id = `group`.id
AND `group`.id = 123
关于mysql - 多对多查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5721030/