我在 2 个不同的数据库中有 2 个表。列的名称和所有内容都匹配。我如何运行查询以查看两个表中的数据是否相同。我需要检查每一行。
问问题
844 次
1 回答
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”来完成。以这种方式表达只是更快。
于 2013-05-08T10:35:05.317 回答