【问题标题】:How to join same table twice on Access如何在 Access 上两次加入同一个表
【发布时间】:2019-01-16 03:55:35
【问题描述】:

我知道在 MySQL 上,我们可以通过给每个表自己的别名来加入同一个表两次,但这似乎不适用于 Access。

例如:

SELECT d.departmentID, d.depName, d.location, c1.memberID, c1.fullName,  c1.reportsTo, c2.fullName
FROM Departments as d
INNER JOIN Contacts as c1
   ON c1.departmentID = d.departmentID
INNER JOIN Contacts as c2
   ON c1.reprtsTo = c2.memberID

这样做会给我一个语法错误。有谁知道我如何加入同一张表(联系人)以获取成员向其报告的人的姓名(c2.fullName)?

更新,我得到的错误:

查询表达式“c1.departmentID = d.departmentID INNER JOIN Contacts as c2 ON c1.reportsTo = c2.memberI”中存在语法错误(缺少运算符)。

【问题讨论】:

  • 你能发布错误吗?
  • 首先,将其更改为:ON c1.departmentID = d.departmentID
  • 好的,我会把它添加到帖子中。

标签: sql ms-access


【解决方案1】:

在 MS Access 中,多个JOIN 需要括号配对:

SELECT d.departmentID, d.depName, d.location, c1.memberID, 
       c1.fullName,  c1.reportsTo, c2.fullName
FROM (Contacts as c1
INNER JOIN Departments as d
   ON c1.departmentID = d.departmentID)
INNER JOIN Contacts as c2
   ON c1.reprtsTo = c2.memberID

【讨论】:

  • 实际上它说“输入参数值”,在字段上方它说c1.memberID
  • 那么,Contacts中就没有memberID这样的字段了。请注意:我使用了相同的查询,但只是合并了括号并切换了第一个 ContactsDepartments 的顺序。
【解决方案2】:

在这种情况下,让 Access 设计编辑器处理连接和别名会更容易。
以下代码基于您的代码,但由设计编辑器创建:

SELECT 
  Departments.departmentID, Departments.depName, Departments.location, 
  Contacts.memberID, Contacts.fullName, Contacts_1.reportsTo, Contacts_1.fullName
FROM (
  Departments INNER JOIN Contacts ON Departments.departmentID = Contacts.departmentID
) INNER JOIN Contacts AS Contacts_1 ON Contacts.reportsTo = Contacts_1.memberID;

【讨论】:

    【解决方案3】:

    只需将表格拖入可视化编辑器两次。它会自动将表的第二个实例重命名为“_1”。

    SELECT Contacts.EmpID, Contacts_1.EmpID AS reportsTo
    FROM Contacts INNER JOIN Contacts AS Contacts_1 ON Contacts.SupervisorID= 
    Contacts_1.EmpID;
    

    【讨论】:

      猜你喜欢
      • 2012-05-29
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 2019-01-20
      • 1970-01-01
      • 2013-11-26
      相关资源
      最近更新 更多