代码之家  ›  专栏  ›  技术社区  ›  kazzi

如何在访问时两次联接同一个表

  •  1
  • kazzi  · 技术社区  · 6 年前

    我知道在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
    

    这样做会导致语法错误。是否有人知道我如何加入同一个表(contacts)以获取成员向其报告的人员的姓名(c2.fullname)?

    更新,我得到的错误:

    查询表达式“c1.departmentid=d.departmentid inner join contacts as c2 on c1.reportsto=c2.memberi”中的语法错误(缺少运算符)。

    3 回复  |  直到 6 年前
        1
  •  4
  •   Parfait    6 年前

    在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
    
        2
  •  1
  •   forpas    6 年前

    在这种情况下,更容易让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
  •   Hopper    6 年前

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

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