使用多个左联接查询ODBC表失败

时间:2018-06-22 17:09:56

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

我最初发布此内容时没有所有ODBC信息。经过进一步调查,该问题似乎与ODBC有关。有了更改,我想报告一下,看看ODBC专家是否正在“侦听”。

我在Access中有以下查询...

查询#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表的两个查询。这些查询的SQL是...

查询PCQualityClass

SELECT aa.DocumentNum, aa.Value AS QualityClass, aa.ResourceID, aa.BldgSeqNum
FROM dbo_PCBldgDetail AS aa
WHERE (((aa.DocumentNum)=[Enter Doc Num]) AND ((aa.ResourceID)="QualityClass") AND ((aa.BldgSeqNum)=[Enter Bldg Num]));

查询PCBldgCond

SELECT aa.DocumentNum, aa.Value AS BldgCond, aa.BldgSeqNum, aa.ResourceID
FROM dbo_PCBldgDetail
WHERE (((aa.DocumentNum)=[Enter Doc Num]) AND ((aa.BldgSeqNum)=[Enter BldgNum]) AND ((aa.ResourceID)="Condition"));

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

查询是在Access中使用“创建查询”工具创建的。 Access愿意创建查询,并且SQL看起来不错。

问题在于,尽管查询#1可以运行,但查询#2导致错误“无效操作”。请注意,如果我从查询2中删除第一个联接,然后将其余联接作为单个联接运行,则该查询有效。

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

从ODBC表更改为本地表可以解决此问题,但不是可行的解决方案,因为ODBC表不能位于本地。

有人对Access和ODBC的相互作用有任何见解吗?我很难相信我是第一个尝试构建具有多个连接的Access / Odbc查询的人。但是我还没有找到Google解决此问题的方法。

0 个答案:

没有答案