无法对 MS Access 查询进行 2 次连接?

Can't do 2 joins on an MS Access query?

所以我检查了所有名称等是否正确,该查询仅适用于其中一个连接,而不是同时存在语法错误:

SELECT *, Invoice_Accounts.Title AS t1, Invoice_Accounts.Forename AS f1, Invoice_Accounts.Surname AS s1 
FROM Invoice_Accounts 
RIGHT JOIN  Delivery_Points ON Invoice_Accounts.Account_No = Delivery_Points.Account_No  
RIGHT JOIN Companies ON Invoice_Accounts.account_id = Companies.Company_No 

这是我想要的查询 运行 但出现错误:

syntax error (missing operator)

更新:

使用:

SELECT  *, 
        Invoice_Accounts.Title AS t1, 
        Invoice_Accounts.Forename AS f1, 
        Invoice_Accounts.Surname AS s1 
FROM    (Invoice_Accounts 
        RIGHT JOIN  Delivery_Points 
            ON Invoice_Accounts.Account_No = Delivery_Points.Account_No)
        RIGHT JOIN Companies 
            ON Invoice_Accounts.account_id = Companies.Company_No

给我报错 "JOIN expression not supported"

在 Access 中,如果有多个联接,则需要在联接周围使用括号:

SELECT  *, 
        Invoice_Accounts.Title AS t1, 
        Invoice_Accounts.Forename AS f1, 
        Invoice_Accounts.Surname AS s1 
FROM    (Invoice_Accounts 
        RIGHT JOIN  Delivery_Points 
            ON Invoice_Accounts.Account_No = Delivery_Points.Account_No)
        RIGHT JOIN Companies 
            ON Invoice_Accounts.account_id = Companies.Company_No 

两个扩展这个,如果你有三个连接,你将需要另一组括号:

SELECT  *
FROM    (( A
        INNER JOIN  B 
            ON B.AID = A.AID)
        INNER JOIN C 
            ON C.BID = B.BID)
        INNER JOIN D
            ON D.CID = C.CID;

编辑

我不知道你不能 RIGHT JOIN 到同一个 table 两次,所以上面是一个错误,说过我从未在生产中使用过 RIGHT JOIN在我生活中的代码中,我倾向于切换到使用更广泛的 LEFT JOIN 并更改 tables:

的顺序
SELECT  *, 
        ia.Title AS t1, 
        ia.Forename AS f1, 
        ia.Surname AS s1 
FROM    (Companies AS c
        LEFT JOIN Invoice_Accounts AS ia
            ON ia.account_id = c.Company_No)
        LEFT JOIN  Delivery_Points AS dp
            ON ia.Account_No = dp.Account_No;

N.B。我使用别名来减少查询中的文本量,这(在我看来)使它们更易于阅读

终于找到答案了:

SELECT Invoice_Accounts.Title AS t1, Invoice_Accounts.Forename AS f1, Invoice_Accounts.Surname AS s1, *

FROM (Companies RIGHT JOIN Invoice_Accounts ON Companies.Company_No = Invoice_Accounts.Company_Name )

RIGHT JOIN Delivery_Points ON Invoice_Accounts.Account_No = Delivery_Points.Account_No;

问题出自古老的 ms-access 技术,在该技术中您无法多次正确加入同一个 table!