MS Access 多个内连接

Posted

技术标签:

【中文标题】MS Access 多个内连接【英文标题】:MS Access Multiple Inner Joins 【发布时间】:2018-05-24 02:15:49 【问题描述】:

我有这个 sql 查询

SELECT e.permission_name 
FROM ((((users_roles a 
          INNER JOIN users b 
          ON a.user_id = b.id) 
         INNER JOIN roles c 
         ON a.role_id = c.id) 
        INNER JOIN roles_permissions d 
        ON c.id = d.role_id) 
       INNER JOIN permissions e 
       ON d.permission_id = e.id) 
WHERE b.id = :id

我已经添加了括号,因为 MS Access 需要它,但它不起作用。

我在 php 中使用 MS Access

【问题讨论】:

究竟是什么不工作? 去掉 () 的 let access 将它们添加回来。 【参考方案1】:

我认为您不需要加括号,这可能会给您带来语法错误。去掉大括号就行了

SELECT e.permission_name 
FROM users_roles a 
INNER JOIN users b ON a.user_id = b.id
INNER JOIN roles c ON a.role_id = c.id
INNER JOIN roles_permissions d N c.id = d.role_id
INNER JOIN permissions e ON d.permission_id = e.id
WHERE b.id = :id

【讨论】:

【参考方案2】:

我建议这样编写查询:

SELECT p.permission_name 
FROM (((users_roles as ur INNER JOIN
        users as u
        ON ur.user_id = u.id
       ) INNER JOIN
       roles as r 
       ON ur.role_id = r.id
      ) INNER JOIN
      roles_permissions as rp
     ON r.id = rp.role_id
     ) INNER JOIN
     permissions as p
     ON rp.permission_id = p.id
WHERE u.id = :id;

与您的版本唯一真正的区别是表别名使用as

【讨论】:

以上是关于MS Access 多个内连接的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 内连接不精确匹配(通配符或类似)

MS Access 2007 中的 SQL 内部连接

MS Access 更新查询和带字符串参数的内部连接

MS Access 选择多个连接

MS Access 并发用户

MS Access:使用多个连接更新语句 [重复]