初探oracle删除重复记录,只保留rowid最小的记录
如题,初探oracle删除重复记录,只保留rowid最小的记录(rowid可以反映数据插入到数据库中的顺序)
一、删除重复记录可以使用多种方法,如下只是介绍了两种方法(exist和in两种)。
1.首先创建一个测试表。
create table my_users(
id number,
username varchar2(20),
sal number
)
2.插入测试数据
begin
for i in 1..10 loop
insert into my_users values(i,'carl_zhang',i+10);
end loop;
end; begin
for i in 1..10 loop
insert into my_users values(i,'carl_zhang',i+20);
end loop;
end; insert into my_users values(100,'carl',20.3); commit;
3.查看重复记录
select rowid,rownum,a.* from my_users a
where 1=1
and exists(
select 'exist' from my_users b
where 1=1
and a.id=b.id
and a.username=b.username
having count(*)>1
)
order by rowid
4.查看重复数据中,rowid最大的记录(rowid可以反映数据插入到数据库中的顺序)
select rowid,rownum,a.* from my_users a
where 1=1
and exists(
select 'exist' from my_users b
where 1=1
and a.id=b.id
and a.username=b.username
-- having count(*)>1
having count(*)>1 and a.rowid=max(b.rowid)
)
order by rowid
5.删除重复数据,保留rowid最小的记录
delete from my_users a
where 1=1
and exists(
select 'exist' from my_users b
where 1=1
and a.id=b.id
and a.username=b.username
-- having count(*)>1
having count(*)>1 and a.rowid=max(b.rowid)
)
二、以上方法是通过exist实现,相比in、not in更加的快速。
1.如下,查看重复记录。
select rowid,rownum,a.* from my_users a
where 1=1
and (a.id,a.username) in(
select b.id,b.username from my_users b
where 1=1
having count(*)>1
group by b.id,b.username
)
order by rowid
2.查看重复数据中,rowid最大的记录
select rowid,rownum,a.* from my_users a
where 1=1
and (a.id,a.username,rowid) in(
select b.id,b.username,max(rowid) from my_users b
where 1=1
having count(*)>1
group by b.id,b.username
)
order by rowid
3.删除重复数据,保留rowid最小的记录
delete from my_users a
where 1=1
and (a.id,a.username,rowid) in(
select b.id,b.username,max(rowid) from my_users b
where 1=1
having count(*)>1
group by b.id,b.username
)
初探oracle删除重复记录,只保留rowid最小的记录的更多相关文章
- oracle删除重复记录,只保留rowid最小的记录
初探oracle删除重复记录,只保留rowid最小的记录 如题,初探oracle删除重复记录,只保留rowid最小的记录(rowid可以反映数据插入到数据库中的顺序) 一.删除重复记录可以使用多种 ...
- oracle删除重复数据只保留一条
-- 如表role_user的数据 ROLEID USERID -- 删除相同记录只剩下一条记录 根据两个字段查询重复数据 (roleid,userid) ) 删除重复数据只保留一条 delete f ...
- Mysql 删除重复数据只保留id最小的
DELETE FROM 表 WHERE id NOT IN ( SELECT id FROM ( SELECT min(b.id) AS id FROM 表 b GROUP BY b.重复字段 ) b ...
- mysql 删除重复数据只保留一条记录
删除重复数据保留name中id最小的记录 delete from order_info where id not in (select id from (select min(id) as id fr ...
- Oracle 删除重复数据只留一条
查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 g ...
- SQL删除重复数据只保留一条
用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select ...
- Oralce中SQL删除重复数据只保留一条(转)
用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 .查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select ...
- MySQL中删除重复数据只保留一条
用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 SELECT ...
- SQL查找 删除重复数据只保留一条
--用SQL语句,删除掉重复项只保留一条 --在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 --1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 ...
随机推荐
- Laxcus大数据管理系统2.0(2)- 第一章 基础概述 1.1 基于现状的一些思考
第一章 基础概述 1.1 基于现状的一些思考 在过去十几年里,随着互联网产业的普及和高速发展,各种格式的互联网数据也呈现爆炸性增长之势.与此同时,在数据应用的另一个重要领域:商业和科学计算,在各种新兴 ...
- 配置Tomcat的JVM的大小解决Tomcat内存溢出的问题
操作步骤如下图所示(图中也有对应的文字说明已比较详细,不再用文字做过多的解释): 1: 2: 3: 4: 5: 下面是配置的参数的说明: -Xms256m JV ...
- Android SharedPreferences 见解
今天突然遇到了SharedPreferences问题,虽然以前用过,但从没有深入的了解一下,今天就顺便深入了解一下,并总结一下,防止以后忘记. SharePreferences是Android平台上一 ...
- Windows API学习---用户方式中的线程同步
前言 当所有的线程在互相之间不需要进行通信的情况下就能够顺利地运行时, Micrsoft Windows的运行性能最好.但是,线程很少能够在所有的时间都独立地进行操作.通常情况下,要生成一些线程来处理 ...
- 【IHttpHandler】使用IHttpHandler防盗链
防盗链的原理,从图片请求的URL地址上判断是否是我们自己网站上的域名,如果不是,恭喜,你的图片已经被盗链了! 那么我来介绍下图片放盗链的一个方法 首先,添加个httpHandlers请求,webcon ...
- C++ Builder技巧集锦
/* 调用DOS程序时不显示窗口 使 用 ShellExecute调 用 DOS程 序 时 可 以 不 显 示 窗 口 , 如 :*/ ShellExecute(, "open", ...
- mac ping ip地址
Mac下有个类似于Windows下CMD的模式叫做终端,但是这个模式和Windows下的CMD有着很大的差别. 工具/原料 Mac电脑一台 方法/步骤 首先通过菜单栏的搜索功能找到“终端”,也可以 ...
- NASM编译器的$和$$标记
NASM中的times相当于MASM中的dup起到重复定义的作用. $表示当前行的偏移地址,$$表示当前段的起始偏移地址, ;------------------------------------- ...
- IOS 支付功能的实现
支付宝是第三方支付平台,简单来说就是协调客户,商户,银行三者关系的方便平台 使用支付宝进行一个完整的支付功能,大致有以下步骤: a 与支付宝进行签约,获得商户ID(partner)和账号ID(sell ...
- [leetcode]_Merge Sorted Array
题目:合并两个有序数组A , B,将合并后的数组存到A中.假设A的空间足够装下A和B所有的元素. 思路:这道题考虑如果正向扫描两个数组,则每插入一个元素,则需移动A后的所有元素.换个角度想,既然元素个 ...