比较2个相同的表以获得数据差异

时间:2013-05-08 10:29:41

标签: mysql

我在2个不同的数据库中有2个表。列的名称和所有内容都匹配。如何运行查询以查看两个表中的数据是否相同。我需要检查每一行。

1 个答案:

答案 0 :(得分: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

请注意,上面的示例还假设两个空值比较相等,可以通过'SET ANSI NULLS OFF'与MS SQL一起使用。用这种方式表达的速度要快得多。

相关问题