如何在Access上两次连接同一张表

时间:2019-01-15 19:23:14

标签: sql ms-access

我知道在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”中的语法错误(缺少运算符),联系人作为c2 ON c1.reportsTo = c2.memberI'。

3 个答案:

答案 0 :(得分:4)

在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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

在这种情况下,让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;