我在Access连接查询中收到了#Error消息,但我不确定原因

时间:2012-08-21 20:47:18

标签: sql ms-access join

我正在尝试合并两组不同的数据。在两组数据之间,某些条目可能是重复的。

表1:

 Common Field A | Field 1 | Field 2
 ---------------------------------
       a            a1        a2
       b            b1        b2

表2:

  Common Field B | Field 3 | Field 4
 ---------------------------------
       c            c1        c2
       a            a1        a2

我在公共字段上进行了联合查询以获取:

  Common Field 
 ---------------
       a
       b
       c

现在我做了两次加入。联合查询和表1之间的一个连接,以及联合查询和表2之间的一个连接。基本上每个连接都已完成,以便列出联合查询的所有条目,以及表中公共字段匹配的行将列出联合查询条目。执行此操作后,我创建了一个包含所有列的查询(请记住上面的两个连接)。这是我的预期:

 Common Field | Common Field A | Common Field B | Field 1 | Field 2 | Field 3 | Field 4
 ------------------------------------------------------------------------------------------
       a               a                a            a1        a2        a1        a2
       b               b                             b1        b2
       c                                c                                c1        c2

这是我得到的:

 Common Field | Common Field A | Common Field B | Field 1 | Field 2 | Field 3 | Field 4
 ------------------------------------------------------------------------------------------
       a               a                a            a1        a2        a1        a2
       b               b              #Error         b1        b2
       c             #Error             c                                c1        c2

我不确定为什么我会收到#Error标志,而且我只是为什么我只是为Common Field条目获取它们而感到困惑。如果有的话,我本来期望至少得到这样的:

 Common Field | Common Field A | Common Field B | Field 1 | Field 2 | Field 3 | Field 4
 ------------------------------------------------------------------------------------------
       a               a                a            a1        a2        a1        a2
       b               b              #Error         b1        b2      #Error    #Error
       c             #Error             c          #Error    #Error      c1        c2

有没有办法摆脱它们?我尝试过使用IIF(IsError(....))但是没有用。我在网上发现了一些尝试,人们试图摆脱#Error消息但无法解决它。我知道最好找到问题的根源,但在这一点上,我可以摆脱#Error消息本身。关于如何处理这个问题的任何想法?

编辑:这是一些示例SQL:

SELECT qryUnion.CommonField, tbl1.CommonFieldA, tbl2.CommonFieldB, tbl1.Field1, tbl1.Field2, tbl2.Field3, tbl2.Field4 
FROM tbl2 RIGHT JOIN ( tbl1 RIGHT JOIN qryUnion ON tbl1.CommonFieldA = qryUnion.CommonField) ON tbl2.CommonFieldB = qryUnion.CommonField;

EDIT2:如果重要的话,这是连接的SQL:

SELECT tbl1.CommonFieldA FROM tbl1 UNION tbl2.CommonFieldB FROM tbl2

1 个答案:

答案 0 :(得分:1)

考虑到#error的显示以及查询的语法,我猜你已经在查询窗口中完成了这个。

创建一个新查询,摆脱添加表窗口,将其放入SQL视图,然后将此逻辑放入其中:

select c.unique, a.commonfieldA, b.commonfieldB, a.field1, a.field2, b.field3, b.field4
from (
    select distinct u as unique from (
        select commonfieldA as u from tbl1 
        union all
        select commonfieldB as u from tbl2
    ) combined ) c 
    left join tbl1 a on c.unique = a.commonfieldA
    left join tbl2 b on c.unique = b.commonfieldB

这应该有效。我不使用你所拥有的Union语法,而是从union-all'd composite中选择不同的值(子查询“合并”)。左连接意味着数据必须存在于连接条件左侧的表中(即c,是在声明tbl1或tbl2之前定义的表),但数据可能存在于右侧的表中,也可能不存在

我会把你的问题归结为为你生成的语法访问,它试图理解你要做的事情:它显示“#Error”对我说它不明白。