2013-05-08 84 views
0

我在2个不同的数据库中有2个表。列的名称和一切匹配。我如何运行查询来查看两个表中的数据是完全相同的。我需要检查每一行。比较2个相同的数据差异表

+0

将数据表导出为文件,然后使用白色脚本进行比较。 – Kasyx 2013-05-08 10:33:58

回答

1

如果您只需要对整个数据集做出肯定/否定的答案,并且表中至少有一个键,则使用所有列执行内部联接,并验证返回的行数是否等于每个表中的行。

select 
    count(*) 
from 
    a 
    inner join b 
on 
    a.c1 = b.c1 and 
    a.c2 = b.c2 and 
    a.c3 = b.c3 

如果需要从每个表中,作为归一化的结果不同的特定的行,则需要从每个表中的多个(至少2)选择,一个以检索独特的(非相交)的行。因为这些表格是相同的模式,所以可以很好地合并这些表格,并将源表格列投影到结果中,以指示每行的起始位置。

如果您需要通过键关联导致的差异(如在编辑之前/之后查找,包括行内容更改,行添加和行删除),并且您的DBMS支持完整外连接,则可以执行完整外键连接,只返回不是所有列都相等的结果。请注意,假设这些密钥在删除后不会重复使用。

SELECT * 
FROM a 
FULL OUTER JOIN b 
ON a.PK = b.PK 
WHERE 
    a.c1 <> b.c1 OR 
    a.c2 <> b.c2 OR 
    a.c3 <> b.c3 

注意上面的例子中还假设两个空值比较相等的,如可与MS SQL经由“SET ANSI NULLS OFF”来完成。用这种方式来表达就更快了。