ORACLE删除表中某一列重复的行
Demo
创建表
--表名:cux_repeat create table cux_repeat ( id number(10), firstname varchar2(50 char), lastname varchar2(50 char) );
插入数据
--插入数据 insert into cux_repeat values (1, 'F1', 'L1'); insert into cux_repeat values (2, 'F2', 'L2'); insert into cux_repeat values (3, 'F3', 'L3'); insert into cux_repeat values (2, 'F2', 'L2'); insert into cux_repeat values (3, 'F3', 'L3'); insert into cux_repeat values (3, 'F3', 'L3'); insert into cux_repeat values (4, 'F4', 'L4'); insert into cux_repeat values (3, 'F4', 'L4');
思路:
1.先将所有行分组后取得最大ROWID。其结果就包含不重复的行,及重复行的最后一笔的ROWID
select max(a.rowid) from cux_repeat a group by a.firstname, a.lastname
2.将表中除此以外的行删掉就可以了
方法一:删除姓名一样的重复行数据
--姓名一样的删除 delete from cux_repeat c where c.rowid not in (select max(a.rowid) from cux_repeat a group by a.firstname, a.lastname);
方法二:(不建议使用)
delete from cux_repeat cp where (cp.firstname, cp.lastname) in (select x.firstname, x.lastname from cux_repeat x group by x.firstname, x.lastname having count(1) > 1) and cp.rowid not in (select min(a.rowid) from cux_repeat a group by a.firstname, a.lastname having count(1) > 1);
本文来自博客园,作者:Iven_lin,转载请注明原文链接:https://www.cnblogs.com/ivenlin/p/18119284
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了