【发布时间】:2011-10-06 11:19:03
【问题描述】:
我正在尝试研究如何比较两个应该具有完全相同数据的无键(即,没有列是主键或唯一的)表。即 tablea 从 my_schema1 到 my_schema2 的直接迁移。
我在想一种可能的方法是:
IF
count from
((select * from my_schema1.tablea
union
select * from my_schema2.tablea))
=
count from
((select * from my_schema1.tablea
union all
select * from my_schema2.tablea) / 2)
THEN
--both tables would be identical (in record counts and all column values the same)
ELSE
--this means that the 2 tables are different in some way
END IF
很高兴拥有功能:我希望通过消除指定列的需要使解决方案尽可能通用。
【问题讨论】:
-
由于没有 PK 可能存在重复的行。您希望这些人如何处理?
-
只要两个表有相同的重复行就可以了。但是,我想确定一个表有一些重复行而另一个表没有的情况。
-
您当前的查询将因此而失败。如果一个表有一列
C并且只有 2 行都具有相同的值,则union将返回 1 行但union all4 行。 -
@KevinBurton - 您的回答不会按要求处理重复项。
-
@KevinBurton - 不,它没有。它只是检查两个表是否具有相同数量的欺骗。不一定是一样的。例如,如果一个表的值
1,1,2和另一个1,2,2。
标签: sql database oracle comparison