mysql - 带有连接的棘手 MySQL 查询?

标签 mysql sql join left-join

我有 4 个表格(还有很多其他表格 - 仅显示相关的表格)。他们是:

  • “用户”
    • ID
    • 姓名
    • role_id
  • “角色”
    • ID
    • 姓名
  • “chapter_role_view_permissions”
    • ID
    • chapter_id
    • role_id
  • “章节”
    • ID
    • 姓名

我正在尝试构建一个查询,该查询将返回所有用户的列表、他们的角色名称、每个用户的所有章节以及他们是否有权查看每个章节。假设有 2 个用户和 2 个章节。用户 1 的 role_id=1,用户 2 的 role_id=2。 Chapter_role_view_permissions 有 1 条记录( id:1 | Chapter_id: 1 | role_id: 1 ),这意味着只有 role_id=1 的用户才能查看第 1 章。

我正在寻找的查询结果应该是这样的:

|---users.id---|--roles.id---|---chapters.id--|-can_view_chapter-|

|------ 1 ------|----- 1 --------|-------- 1 --------|- ---------- 1 -----------|

|------ 1 ------|----- 1 -------|-------- 2 --------|- ---------- 0 -----------|

|------ 2 ------|----- 2 -------|-------- 1 --------|- ---------- 0 -----------|

|------ 2 ------|----- 2 -------|-------- 2 --------|- ---------- 0 -----------|

知道查询是什么样子吗?我不想在 Chapter_role_view_permissions 中创建一个显示“允许”的新字段,并为每种角色类型插入 allowed=1 或 allowed=0 的新记录

最佳答案

SELECT users.name, roles.name, chapters.name
FROM users
  LEFT OUTER JOIN roles ON users.role_id = roles.id
  LEFT OUTER JOIN chapter_role_view_permissions link ON link.role_id = roles.id
  LEFT OUTER JOIN chapters ON chapters.id = link.chapter_id

关于mysql - 带有连接的棘手 MySQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13183371/

相关文章:

MySQL - 在创建时将列名设置为 ID?

mysql - 在不知道密码的情况下授予对数据库的访问权限

php - Mysql Order By Optimization 有两个索引

MySQL连接无法从一张表中选择

mysql - 查找有关日期和标题的重复条目

php - 'type' 中的未知列 'where clause'

mysql - 在不同于 MySQL 的 MS SQL Server 中更新内部连接?

sql - 当列值为 null 时,不要在 where 条件中附加 "and"子句

sql - 指望同一张 table

MySQL 选择查询自定义输出