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

时间:2015-02-12 14:13:32

标签: ms-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 

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

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表达式”

2 个答案:

答案 0 :(得分:2)

在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两次同桌,所以上面是一个错误,说过我生命代码中从未使用RIGHT JOIN,我将倾向于切换到更广泛使用的LEFT JOIN并更改表的顺序:

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。我使用了别名来减少查询中的文本量,这(在我看来)使它们更容易阅读

答案 1 :(得分:1)

最终找出答案:

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技术,你无法连续多次加入同一张桌子!