oracle 删除指定字段重复的记录

本文介绍了一段SQL操作流程,通过编写特定的SQL查询来去除数据库表中重复的记录,并且保留每个分组下ID最小的数据项。具体步骤包括:获取所有记录并排除name和score重复的情况,获取有重复记录的数据并获取ID最小的记录,最后删除重复记录并保留ID最小的那一条。

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

SQL> select * from t; ID NAME SCORE ---------- ---------- ---------- 3 smith 100 4 smith 100 5 jerry 80 6 tom 80 1 evan 100 2 evan 100 7 evan 100 已选择7行。 SQL> ed tmp.buf SQL> --获取所有的记录,但name与score两者不能重复 SQL> --哪些字段相同,以哪些字段分组,然后获取其最小的id SQL> select min(id) id,name,score from t group by name,score; ID NAME SCORE ---------- ---------- ---------- 6 tom 80 3 smith 100 1 evan 100 5 jerry 80 SQL> ed tmp.buf SQL> --获取有重复记录的数据(有重复说明分组后count(*)>1),并且其id最小的记录 SQL> --哪些字段相同,以哪些字段分组,然后获取其最小的id SQL> select min(id) id,name,score from t group by name,score having count(*) > 1; ID NAME SCORE ---------- ---------- ---------- 3 smith 100 1 evan 100 SQL> ed tmp.buf SQL> --删除那些name与score重复的记录,只保留id最小的那一条 SQL> DELETE FROM t 2 WHERE t.ID NOT IN (SELECT MIN(id) AS id FROM t GROUP BY NAME, score); 已删除3行。 SQL> select * from t; ID NAME SCORE ---------- ---------- ---------- 3 smith 100 5 jerry 80 6 tom 80 1 evan 100此外还可以使用临时表的方式,即将我们需要的数据(没有重复的数据)先放到临时表中,然后删除正式表中的数据,最后将临时表中的数据插入到正式表中。
但是效率如何我还不知道哩,没有测试哩!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值