mysql - 多对多查询问题

标签 mysql sql django

我有三个简单的表:基于多对多的组、权限和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/

相关文章:

python - Django:如何为 MySQL 数据库设置正确的位置

php - 如何使用数组在 MySQL 中插入两个以上的查询

php - Mysql有唯一记录键吗?

mysql - 如何为相关内容类型构建数据库

MySql选择下一个较小的数字而不使用限制

Django block 反式计数复数

Django TemplateSyntaxError 无法解析其余部分

mysql - 在 SQL 中如何使用 1 和 0 值来总结 (+1) 和向下 (-1) 投票?

mysql - 组函数MySql的无效使用

mysql - 需要查询相隔7天内的所有记录