在Access中使用SQL来获取2个表之间的差异吗?
我正在建立一个审计功能,我想从table1返回所有记录,其中一个或多个值与table2中的相应记录不匹配。主键始终在两个表之间匹配。它们将始终包含完全相同数量的字段,字段名称和类型。但是,在运行查询之前无法确定这些字段的数量和名称。
请注意,我正在寻找Access SQL解决方案。我知道如何用VBA解决这个问题。
谢谢,
答案 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.为了获得单个查询的所有差异,必须使用完整的连接,如上述