Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql MSAccess中存在多个左联接的问题_Sql_Ms Access - Fatal编程技术网

Sql MSAccess中存在多个左联接的问题

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

这与我先前的问题有关

问题是,我有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.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中您需要处理括号…”部分。