【oracle】删除重复记录方法汇总

本文提供三种有效删除数据库中重复记录的方法。方法一适用于大量重复记录,通过特定SQL语句高效处理;方法二适合少量重复记录,利用子查询选择保留记录;方法三介绍临时表法,适合含或不含主键的表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 删除重复记录方法汇总

☆推荐使用方法一!

方法一:适用于有大量重复记录的情况(在C1、C10和C20列上建有索引的时候,效率会很高)

SQL语句一:

delete cz
 where (c1, c10, c20) in (select c1, c10, c20
                            from cz
                           group by c1, c10, c20
                          having count(*) > 1)//此子句查出所有的重复记录。
   and rowid not in
       (select min(rowid) from cz group by c1, c10, c20 having count(*) > 1);//此子句查出的是要留下的重复记录中的其中一条

//注:同样,rowid等同于主键,所以也可用其他主键代替,

SQL语句二:

delete cz where rowid not in(select min(rowid) from cz group by c1,c10,c20);//此子句查出的是要留下的记录。

//比上句简单。

 

方法二:适用于有少量重复记录的情况(注意:对于有大量重复记录的情况,效率会很低)

SQL语句:

delete from cz a
 where a.rowid != (select max(rowid)
                     from cz b
                    where a.c1 = b.c1
                      and a.c10 = b.c10
                      and a.c20 = b.c20);

 

方法三:适用于有少量重复记录的情况(临时表法)

{没有主键的表如何消重复记录}:

create table test1 as select distinct * from test;

drop table test;

rename test1 to test;--重命名表名

{含有主键的表如何消重复记录}:

create table test1 as select distinct mk from test;--mk为除去主键的其他字段。

alter table test1 add(id number(3));--添加ID字段(待做主键)

update test1 set id=(select max(id) from test where mk=test1.mk);--为主键字段填值(选取原表相应重复记录中的最大主键值)

alter table test1 add primary key(id);--修改ID字段为主键

drop table test1;

rename test1 to test;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值