2

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

表格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

现在我做了2个连接。联合查询和表 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 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
4

1 回答 1

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 复合(子查询“combined”)中选择不同的值。左连接意味着数据必须存在于连接条件左边的表中(即c,是在声明tbl1或tbl2之前定义的表),但数据可能存在也可能不存在于右边的表中.

我会将您的问题归结为为您生成的语法访问,因为它试图了解您正在尝试做什么:它显示“#Error”对我说它不理解。

于 2012-08-22T03:22:09.867 回答