怎么比较两个表是否完全相同

如题所述

1、先确定表结构是否相同
这个查看通过数据字典就可以实现
oracle中表的数据字典是:all_tables
字段的数据字典是:all_tab_cols

select count(*) from
(select column_name,data_type,data_length
from all_tab_cols
where table_name = 'tab1'
minus
select column_name,data_type,data_length
from all_tab_cols
where table_name = 'tab2');
如果结果是0,则说明两个表结构相同

2、对比记录是否完全一致
select count(*) from
(select * from tab1
minus
select * from tab2);

如果结果是0,说明两个表大致相同。

这个例子只是对比了字段类型,长度,还有其他好多因素没对比(比如字段是否允许为空,是否有约束,表是否有触发器等等)。但我们通常意义上的相同比这两项就够了。其实两个表不可能完全相同,一个数据库中不可能出现完全相同的两个表
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-12-22
1、先确定表结构是否相同
这个查看通过数据字典就可以实现
oracle中表的数据字典是:all_tables
字段的数据字典是:all_tab_cols

select count(*) from
(select column_name,data_type,data_length
from all_tab_cols
where table_name = 'tab1'
minus
select column_name,data_type,data_length
from all_tab_cols
where table_name = 'tab2');
如果结果是0,则说明两个表结构相同

2、对比记录是否完全一致
select count(*) from
(select * from tab1
minus
select * from tab2);

如果结果是0,说明两个表大致相同。

这个例子只是对比了字段类型,长度,还有其他好多因素没对比(比如字段是否允许为空,是否有约束,表是否有触发器等等)。但我们通常意义上的相同比这两项就够了。其实两个表不可能完全相同,一个数据库中不可能出现完全相同的两个表
第2个回答  2015-12-03

    最简单的两个db的表做minus。

    将数据按照固定顺序spool出来,然后对spool出来的数据做diff。

    两个表 A 和 表B,表结构一样,那么

    select * from A
    minus
    select * from B

    有结果出来,说明两个表的数据就不一样。
    你现在是两个DB,那么从其中一个建一个database link 连接到另外一个上面就行了。

第3个回答  2007-10-27
select * from [TABLE1]
WHERE NOT EXISTS(select * from [TABLE2])
UNION ALL
select * from[TABLE2]
WHERE NOT EXISTS(select * from [TABLE1])
如果返回记录为空就是完全相同,
当然还要排除两个表都为空的情况
第4个回答  2007-10-26
先select count(*) from table两个表都这样,比较一下记录数

然后select table1.字段1,table1.字段2,table1.字段3 from table1,table2 where table1.字段1=table2.字段1 and table1.字段2=table2.字段2 and table1.字段3=table2.字段3

字段数量可以添加