我在Access 2007中工作,对SQL和非常非常少的VBA一无所知。我正在尝试进行联合查询以连接两个表,并删除重复项。
但是,我的很多副本在一个条目中都有信息,而另一个条目则没有。它不是100%完全重复。
实施例,
第1行:A,B,BLANK
第2行:A,BLANK,C
我希望它合并这两个最终成为A,B,C的一行。
我在这里发现了一个类似的问题,但我根本不理解答案。任何帮助将不胜感激。
答案 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),子查询中的union
或full outer join
- 所有这些都有助于简化查询。