首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Access查询根据表的链接方式返回空字段

Access查询根据表的链接方式返回空字段
EN

Stack Overflow用户
提问于 2009-03-05 16:45:39
回答 2查看 3.2K关注 0票数 3

我有一个用于报告的Access MDB,它具有来自SQL Server2005的链接表视图。我构建了一个从PO表中检索信息的查询,并根据另一个表中的信息对行项目进行分类。我相对确定查询是正常的,直到大约一个月前,我们根据主要应用程序(创建数据)的要求,在服务器上从兼容模式80切换到90。我不能百分之百肯定地说,但这是过去90天内唯一的重大变化。我们注意到数据突然没有出现在查询中,这使得报告看起来很奇怪。

这是失败查询的副本:

代码语言:javascript
复制
SELECT dbo_porel.jobnum, dbo_joboper.opcode, dbo_porel.jobseqtype,
    dbo_opmaster.shortchar01, 
    dbo_porel.ponum, dbo_porel.poline, dbo_podetail.unitcost

FROM ((dbo_porel 
LEFT JOIN dbo_joboper ON (dbo_porel.assemblyseq = dbo_joboper.assemblyseq) 
    AND (dbo_porel.jobseq = dbo_joboper.oprseq) 
    AND (dbo_porel.jobnum = dbo_joboper.jobnum)) 
LEFT JOIN dbo_opmaster ON dbo_joboper.opcode = dbo_opmaster.opcode) 
LEFT JOIN dbo_podetail ON (dbo_porel.poline = dbo_podetail.poline) 
    AND (dbo_porel.ponum = dbo_podetail.ponum)

WHERE (dbo_porel.jobnum="367000003")

它返回以下内容:

代码语言:javascript
复制
jobnum    opcode  jobseqtype  shortchar01  ponum  poline  unitcost
367000003            S                     6624       2      15

查询通常应该显示操作码和shortchar01的值。如果我删除链接表dbo_podetail,它会正确地显示这些字段的数据(尽管我显然不再有单位成本)。起初,我认为这可能是数据问题,但我发现,如果我嵌套查询,然后链接表,它会工作得很好。

例如,下面的代码可以完美地工作:

代码语言:javascript
复制
SELECT qryTest.*, dbo_podetail.unitcost

FROM (

    SELECT dbo_porel.jobnum, dbo_joboper.opcode, dbo_porel.jobseqtype,
        dbo_opmaster.shortchar01, dbo_porel.ponum, dbo_porel.poline

    FROM (dbo_porel 
    LEFT JOIN dbo_joboper ON (dbo_porel.jobnum=dbo_joboper.jobnum) 
        AND (dbo_porel.jobseq=dbo_joboper.oprseq) 
        AND (dbo_porel.assemblyseq=dbo_joboper.assemblyseq)) 
    LEFT JOIN dbo_opmaster ON dbo_joboper.opcode=dbo_opmaster.opcode

    WHERE (dbo_porel.jobnum="367000003")

) As qryTest 
LEFT JOIN dbo_podetail ON (qryTest.poline = dbo_podetail.poline) 
    AND (qryTest.ponum = dbo_podetail.ponum)

我不明白为什么它在后一种情况下有效,而在第一种情况下不起作用。更糟糕的是,它似乎间歇性地适用于某些记录,而不适用于其他记录(它对哪些记录有效,哪些记录无效)是一致的。

你们这些专家有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-06 03:42:30

在Access中,您肯定需要为多个左/右连接使用子查询。

我认为这是Jet优化器的一个限制,如果你只是链接左/右连接,它会被弄糊涂。

你可以经常see that this is a recurrent problem那个表面。

票数 1
EN

Stack Overflow用户

发布于 2009-03-05 18:30:40

我总是对Access在joins中使用括号感到困惑。试着去掉多余的括号。

代码语言:javascript
复制
FROM 
    dbo_porel 
LEFT JOIN 
    dbo_joboper ON (dbo_porel.assemblyseq = dbo_joboper.assemblyseq) 
        AND (dbo_porel.jobseq = dbo_joboper.oprseq) 
        AND (dbo_porel.jobnum = dbo_joboper.jobnum)
LEFT JOIN 
    dbo_opmaster ON (dbo_joboper.opcode = dbo_opmaster.opcode)
LEFT JOIN 
    dbo_podetail ON (dbo_porel.poline = dbo_podetail.poline) 
        AND (dbo_porel.ponum = dbo_podetail.ponum)

好的,上面的方法不起作用--抱歉,我放弃了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/615609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档