将一个表的每列与另一个表的每列进行比较

时间:2013-01-30 15:20:49

标签: sql oracle oracle10g

我在两个数据库中有两个表,其中一个被复制(通过信息映射,我不能通过简单插入替换它),因此我需要查看每个列是否与原始表具有相同的数据。如果我想测试一个列,我会这样做:

Select column1
from 
table1
minus
Select column1
from 
table2@dblink

如果我在有100列的表格的每一列上都这样做,那将是浪费时间。我试着这个比较:

Select column1,column2,.....column N
from 
table1
minus
Select column1,column2,.....column N
from 
table2@dblink

但是,即使一列不匹配,它也会返回所有值。所以我想知道最好的方法是什么,以便我的脚本比较两个表并返回没有相同值的列。

我想到的另一个标准是:

select 
(case when T.column1 <> P.column1 then T.id else null),
...
...
...
from
table1 T,
schema.table1@dblink P
where
T.id=P.id
and T.date>='01-DEC-2012'
and T.date<='10-DEC-2012'
and P.date>='01-DEC-2012'
and P.date<='10-DEC-2012';

我过去使用日期功能来提高性能。

2 个答案:

答案 0 :(得分:0)

使用oracle except keyword

Select * from tableA
except 
Select * from tableb

这将为您提供a中存在的所有行而不是b

select * from tableb
except 
select * from tablea

这将为您提供b中存在的所有行,而不是

答案 1 :(得分:0)

甚至不打扰做测试。截断Table_B并从Table_A插入Table_B。如果您不希望Table_B更改,请将其设置为READ。