同一查询中的多个左连接导致 "Invalid Operation" 错误

Multiple Left Joins in the same query causes "Invalid Operation" Error

我有以下疑问...

查询#1

SELECT aa.DocNum, b.QualityClass
FROM dbo_TransferHistory AS aa LEFT JOIN PCQualityClass AS bb ON aa.DocNum = bb.DocumentNum
WHERE (((aa.DocNum)=[Enter Doc Num]));

查询 #2

SELECT aa.DocNum, bb.QualityClass, cc.BldgCond
FROM (dbo_TransferHistory AS aa LEFT JOIN PCQualityClass AS bb ON aa.DocNum = bb.DocumentNum) 
      LEFT JOIN PCBldgCond AS cc ON aa.DocNum = cc.DocumentNum
WHERE (((aa.DocNum)=[Enter Doc Num]));

dbo_TransferHistory 是一个 table 我通过 ODBC 连接器访问。 PCQualityClass 和 PCBldgCond 是两个基于另一个 ODBC table 的查询。这两个查询都只有主查询中引用的两个相应字段。

DocNum 和 DocumentNum 是同一类型("Short Text" 且长度为 12),虽然我想使名称相同,但我做不到。 当查询为运行时,弹出输入框,[Enter Doc Num]被替换为我要数据的Document Number。

查询是在 Access 中使用创建查询工具创建的。

问题是虽然查询 #1 有效,但查询 #2 导致错误 "Invalid Operation"。

更改为内部联接将允许查询 #2 运行,但会导致问题,因为有时两个子查询中的一个或两个都没有数据,但我仍然需要来自主查询的数据 table.

请帮忙,我不知道为什么这不起作用。这是一个 Access 2013 错误,不允许在同一查询中使用两个左连接还是我遗漏了什么?

SQL 看起来应该可以,所以问题可能出在基本查询加上两个左连接的组合上。

我对 ODBC 表和多个外部联接的 Access 查询的一般经验是:即使你让它们工作,它们通常执行得非常糟糕。

所以我的建议是:在 SQL 服务器上将整个内容重新创建为 view,以及 link 该视图。然后您的 Access 查询变得微不足道,例如

SELECT * FROM dbo_ViewTransferHistory
WHERE DocNum=[Enter Doc Num]

好吧,这让我非常沮丧!@#$%。语法正确,我在网上看到的一切都表明它应该有效。出于纯粹的沮丧和好奇,我将 ODBC tables 作为本地 tables 导入到 Access 中,并将查询中的 table 引用更改为使用本地 tables .天哪,现在可以了。相同的数据,相同的结构,不同的 table 类型,它 !@#$ing 有效。所以看起来问题在于尝试使用 ODBC 进行多个连接。不幸的是,每次此查询获得 运行 时,我无法从 ODBC 创建本地 tables。将继续研究这个问题,看看我是否能找到另一种解决方法。还有其他想法吗?

基本上,Access 在使用 ODBC 数据源时将不允许多个外部联接。我要将其标记为已回答并在新 post 中重新表述问题。 谢谢。