我正在尝试合并两组不同的数据。在两组数据之间,某些条目可能是重复的。
表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
答案 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”对我说它不明白。