Sql MSAccess中存在多个左联接的问题
这与我先前的问题有关 问题是,我有3个左联接,后跟一个Sql MSAccess中存在多个左联接的问题,sql,ms-access,Sql,Ms Access,这与我先前的问题有关 问题是,我有3个左联接,后跟一个和操作符来检查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
和操作符来检查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**
如果我取出和零件,它工作正常
有什么想法吗?您正在尝试匹配ON子句中的两个文件,并且任何表都是MANAGERDETAILS
我不知道您想用这个sql得到什么,但是您可以将AND过滤器设置为正确的on(在E.EID=D.EID之后)或者,您也可以更改用于在当前打开中筛选的表,以便其中一个字段属于MANAGERDETAILS。您需要对Employee表进行第二次引用,因为您正在尝试提取经理的员工记录
挑选*
从…起
(
(
(员工作为E在E.EID=D.EID上作为D离开加入部门)
左键作为M键加入管理器
在D.DID=M.DID上
)
左连接管理器详细信息作为MD
在M.DID=MD.MDID上
)
在MD.ENO=E2.ENO上以E2的身份左键加入员工
我们没有足够的关于您期望的数据的信息,但将执行此查询
我知道在Access中需要处理括号,但可以使用图形查询生成器来处理 我写这篇文章的方式是:
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中实现任意复杂的左连接。
您的double join子句可能不起作用,因为它的一个成员引用的结果集比在该查询级别可见的结果集更深。您的意思是SELECT*FROM((员工作为E左加入部门作为D在E.EID=D.EID上)左加入管理者M在D.DID=M.DID上)左加入管理者详细信息MD在M.MDID=MD.MDID上)E.ENO=D.ENO在这种情况下也是抛出错误。请你重写上面的查询。不要担心结果。这就是我的意思:选择*FROM((员工在E.EID=D.EID和E.ENO=D.ENO上左加入部门为D)左加入经理在D.DID=M.DID上左加入经理详细信息在M.MDID=MD.MDID上)你是手工写加入,还是让QBE帮你写?我发现让QBE来做会更好。也许我遗漏了一些东西,但QBE中不支持多个左连接,因为您无法真正设置连接的操作顺序。我发现多个连接往往会以一团乱麻结束,而且很少给我我期望的结果。对于更复杂的查询,我通常使用SQL,这使我能够更好地控制查询的构造方式。使用QBE。这将不起作用,因为如果您想在MS Access中执行多个左连接,您应该在From子句中使用括号。我猜这解释了“我知道在Access中您需要处理括号…”部分。