Oracle数据库删除表中的重复数据,只保留其中的一条,以两个字段为例,提供两种方法
①、直接delete重复的数据
delete from table_name t1
where (t1.col1, t1.col2) in (select col1, col2 from table_name group by col1, col2 having count(*) > 1)
and t1.rowid in (select min(rowid) from table_name group by col1, col2 having count(*) > 1);
②、查询出所有不重复的数据,入到一张中间表中,然后把原表的数据清空,最后把中间表的数据入到原表中
--数据入到中间表中
insert into table_mid_name
select t1.* from table_name t1
where t1.rowid in (select min(rowid) from table_name group by col1, col2 ) ;
--清除原表数据
truncate table table_name ;
--数据入到原表中
insert into table_name select * from table_mid_name ;