两个表之间的差异,未知字段

时间:2016-12-22 19:08:02

标签: sql ms-access

在Access中使用SQL来获取2个表之间的差异吗?

我正在建立一个审计功能,我想从table1返回所有记录,其中一个或多个值与table2中的相应记录不匹配。主键始终在两个表之间匹配。它们将始终包含完全相同数量的字段,字段名称和类型。但是,在运行查询之前无法确定这些字段的数量和名称。

请注意,我正在寻找Access SQL解决方案。我知道如何用VBA解决这个问题。

谢谢,

3 个答案:

答案 0 :(得分:0)

不确定没有您的表结构但是您可以使用NOT IN运算符(OR)使用WHERE NOT EXISTS完成

select * from table1
where some_field not in (select some_other_field from table2);

(OR)

select * from table1 t1
where not exists (select 1 from table2 where some_other_field = t1.some_field);

答案 1 :(得分:0)

有几种方法可以比较具有已知名称的字段,但SQL无法在不知道其名称的情况下访问字段。主要是因为SQL没有考虑字段在表中具有特定的顺序。 因此,如果有一个SQL-Command,那么在纯Access-SQL中完成所需内容的唯一方法就是(类似*作为所有字段的占位符)。但是没有。 Microsoft Access SQL Reference

您可以做的是在VBA中动态创建SQL子句。 (我知道,你说你不想在VBA中这样做 - 但这是在SQL中做的,但是使用VBA来创建SQL ......)。 在VBA中执行所有操作可能需要一些时间,但是动态创建SQL非常快,您可以将其优化到特定的表。然后执行SQL是您可以获得的最快的解决方案。

答案 2 :(得分:-1)

SELECT A.*, B.* FROM A FULL JOIN B ON (A.C = B.C) WHERE A.C IS NULL OR B.C IS NULL;

如果您有表A和B,两者都有colum C,这里是记录,这些记录存在于表A但不存在于B.为了获得单个查询的所有差异,必须使用完整的连接,如上述