oracle高效的批量删除重复数据

       如何高效删除重复数据?用诸如:

rowid,id相等,速度太慢了。对于大数据量的表的做插入,效率最好的是用临时表。

 

基本上就是这么一流程:

 

drop table t1

create table t1 as select ctemp.id ,max(ctemp.name) name,
max(ctemp.city) city  from  cardtypeid_temp  ctemp 
group by ctemp.id 

truncate table cardtypeid_temp

insert into cardtypeid_temp  select * from t1

 

 

在创建临时表的时候,没有用distinct * ,因为*是整行,如果id(唯一)相同,name不同,在用distinct的时候

任何会认为不同,这显然是不可以的。

如果用 distinct id,name意思是与distinct * 一样的。

 

由于这里我只判断id是重复列,所以分组的时候用就只了id,而其他的列表项除了ctemp.id外,都是单行

函数,必须要取别名。

注意一定要列出原表的全部字段

才能在往原表里面插入的时候就不会报错。好像是报告value is not enough。

你可能感兴趣的:(oracle)