访问在联合查询中删除某些重复项的部分

时间:2014-10-27 21:03:39

标签: sql database duplicates ms-access-2007 union

我在Access 2007中工作,对SQL和非常非常少的VBA一无所知。我正在尝试进行联合查询以连接两个表,并删除重复项。

但是,我的很多副本在一个条目中都有信息,而另一个条目则没有。它不是100%完全重复。

实施例,
第1行:A,B,BLANK
第2行:A,BLANK,C

我希望它合并这两个最终成为A,B,C的一行。

我在这里发现了一个类似的问题,但我根本不理解答案。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我建议像这样的查询:

select
  coalesce(t1.a, t2.a) as a,
  coalesce(t1.b, t2.b) as b,
  coalesce(t1.c, t2.c) as c
from
  table1 t1
  inner join table2 t2 on t1.key = t2.key

在这里,我使用了关键字coalesce。这将采用值列表中的第一个非空值。另请注意,我使用key来指示两行之间的列相同。从您的示例看起来像A,但我无法确定。

答案 1 :(得分:0)

如果您的第一个表具有所有键值,则可以执行以下操作:

select t1.a, nz(t1.b, t2.b), nz(t1.c, t2.c) as c
from table1 as t1 left join
     table2 as t2
     on t1.a = t2.a;

如果不是这种情况,你可以使用这个相当神秘的构造:

select t1.a, nz(t1.b, t2.b), nz(t1.c, t2.c) as c
from table1 as t1 left join
     table2 as t2
     on t1.a = t2.a
union all
select t2.a, t2.b, t2.c
from table2 as t2
where not exists (select 1 from table1 as t1 where t1.key = t2.key)

union的第一部分获取第一个表中有键值的行。第二个获取键值在第二个但不是第一个的行。

请注意,这在Access中比在其他(我敢说"真实")数据库中要困难得多。 MS Access不支持公共表表达式(CTE),子查询中的unionfull outer join - 所有这些都有助于简化查询。