【问题标题】:Multiple Left Joins in the same query causes "Invalid Operation" Error同一查询中的多个左连接导致“无效操作”错误
【发布时间】:2018-06-21 23:13:16
【问题描述】:

我有以下疑问...

查询 #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 是我通过 ODBC 连接器访问的表。 PCQualityClass 和 PCBldgCond 是基于另一个 ODBC 表的两个查询。这两个查询都只有主查询中引用的两个字段。

DocNum 和 DocumentNum 是同一类型(“短文本”,长度为 12),虽然我想让名称相同,但我不能。 运行查询时,会弹出一个输入框,并将 [Enter Doc Num] 替换为我要为其提供数据的文档编号。

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

问题是,虽然查询 #1 可以工作,但查询 #2 会导致错误“无效操作”。

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

请帮忙,我不知道为什么这不起作用。这是 Access 2013 的错误,它不允许在同一个查询中使用两个左连接还是我缺少的其他东西?

【问题讨论】:

  • 如果您从查询 #2 中删除 PCQualityClass,它会起作用吗?
  • 是的。仅使用 PCBldgCond 连接运行 #2 即可。我也尝试过将其他查询作为连接的右侧。当只有一个连接时,一切都很好。添加第二个连接,Access 会触发“无效操作”错误。

标签: sql ms-access ms-access-2013


【解决方案1】:

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

我对 ODBC 表和多个外连接的 Access 查询的一般经验是:即使你让它们工作,它们通常表现很差。

所以我的建议是:在 SQL Server 上将整个内容重新创建为 视图,然后链接该视图。然后你的 Access 查询就变得像

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

【讨论】:

  • 那很好,但我无法编辑服务器端数据。我只能通过 Access 获得它。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    相关资源
    最近更新 更多