MS Access中超过1个左连接的问题

时间:2009-06-29 10:34:07

标签: sql ms-access

这与我之前的问题More than 1 Left joins in MSAccess

有关

问题是我有3个左连接,然后是AND运算符来检查1个条件。

如果我运行,那么我收到错误“不支持加入表达式”

查询如下:

SELECT * FROM(( EMPLOYEE AS E  LEFT JOIN DEPARTMENT AS D ON E.EID=D.EID)
                 LEFT JOIN MANAGERS M ON D.DID=M.DID)
             LEFT JOIN MANAGERDETAILS MD  ON M.MDID=MD.MDID
 **AND E.ENO=MD.ENO**

如果我取出AND部分,它可以正常工作。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

我写这个的方式是:

SELECT EDM.*, MANAGERDETAILS.*
FROM (
    SELECT ED.*, MANAGERS.*
    FROM (
        SELECT EMPLOYEE.*, DEPARTMENT.*
        FROM EMPLOYEE
        LEFT JOIN DEPARTMENT
        ON EMPLOYEE.EID = DEPARTMENT.EID
    ) AS ED
    LEFT JOIN MANAGERS
    ON ED.DID = MANAGERS.DID
) AS EDM
LEFT JOIN MANAGERDETAILS
ON EDM.MDID = MANAGERDETAILS.MDID
    AND EDM.ENO = MANAGERDETAILS.ENO

基本上,您可以一次连接一个表,并将结果作为别名,然后将其用于下一次连接。

只能通过别名较小的子集来实现Access中任意复杂的Left连接。 您的双连接子句可能不起作用,因为其中一个成员引用的结果集比在该查询级别可见的结果集更深。

答案 1 :(得分:0)

您正在尝试匹配ON子句中的两个文件,并且任何表都是MANAGERDETAILS。

我不知道你试图用这个sql得到什么,但是你可以将AND过滤器放在正确的ON上(在E.EID = D.EID之后),或者你可以改变用于过滤的表当前ON所以其中一个字段属于MANAGERDETAILS。

答案 2 :(得分:0)

您需要第二次引用Employee表,因为您试图提取经理的员工记录。

SELECT * 从 (   (     (雇员作为E E LEFT JOIN部门作为E.EID = D.EID)     LE JOIN MANAGERS AS M       ON D.DID = M.DID   ) LEFT JOIN MANAGERDETAILS作为MD   ON M.DID = MD.MDID ) 左边加入雇员作为E2 ON MD.ENO = E2.ENO;

我们没有足够的关于您期望的数据的信息,但此查询将会执行。

我知道在Access中您需要处理括号,但是您可以使用图形查询构建器来完成此操作。