这与我之前的问题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
部分,它可以正常工作。
有什么想法吗?
答案 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中您需要处理括号,但是您可以使用图形查询构建器来完成此操作。