oracle数据库去除重复数据


Posted in Oracle onMay 20, 2022

创建测试数据

create table nayi224_180824(col_1 varchar2(10), col_2 varchar2(10), col_3 varchar2(10));
insert into nayi224_180824
select 1, 2, 3 from dual union all
select 1, 2, 3 from dual union all
select 5, 2, 3 from dual union all
select 10, 20, 30 from dual ;
commit;
select*from nayi224_180824;
COL_1 COL_2 COL_3
1 2 3
1 2 3
5 2 3
10 20 30

针对指定列,查出去重后的结果集

distinct

select distinct t1.* from nayi224_180824 t1;
COL_1 COL_2 COL_3
10 20 30
1 2 3
5 2 3

方法局限性很大,因为它只能对全部查询的列做去重。如果我想对col_2,col3去重,那我的结果集中就只能有col_2,col_3列,而不能有col_1列。

select distinct t1.col_2, col_3 from nayi224_180824 t1
COL_2 COL_3
2 3
20 30

不过它也是最简单易懂的写法。

row_number()

select *
  from (select t1.*,
               row_number() over(partition by t1.col_2, t1.col_3 order by 1) rn
          from nayi224_180824 t1) t1
 where t1.rn = 1
;
COL_1 COL_2 COL_3 RN
1 2 3 1
10 20 30 1

写法上要麻烦不少,但是有更大的灵活性。

针对指定列,查出所有重复的行

count having

select *
  from nayi224_180824 t
 where (t.col_2, t.col_3) in (select t1.col_2, t1.col_3
                                from nayi224_180824 t1
                               group by t1.col_2, t1.col_3
                              having count(1) > 1)
COL_1 COL_2 COL_3
1 2 3
1 2 3
5 2 3

要查两次表,效率会比较低。不推荐。

count over

select *
  from (select t1.*,
               count(1) over(partition by t1.col_2, t1.col_3) rn
          from nayi224_180824 t1) t1
 where t1.rn > 1
;
COL_1 COL_2 COL_3 RN
1 2 3 3
1 2 3 3
5 2 3 3

只需要查一次表,推荐。

删除所有重复的行

delete from nayi224_180824 t
 where t.rowid in (
                   select rid
                     from (select t1.rowid rid,
                                   count(1) over(partition by t1.col_2, t1.col_3) rn
                              from nayi224_180824 t1) t1
                    where t1.rn > 1);

就是上面的语句稍作修改。

删除重复数据并保留一条

分析函数法

delete from nayi224_180824 t
 where t.rowid in (select rid
                     from (select t1.rowid rid,
                                  row_number() over(partition by t1.col_2, t1.col_3 order by 1) rn
                             from nayi224_180824 t1) t1
                    where t1.rn > 1);

拥有分析函数一贯的灵活性高的特点。可以为所欲为的分组,并通过改变orderby从句来达到像”保留最大id“这样的要求。

group by

delete from nayi224_180824 t
 where t.rowid not in
       (select max(rowid) from nayi224_180824 t1 group by t1.col_2, t1.col_3);

牺牲了一部分灵活性,换来了更高的效率。

总结

到此这篇关于oracle数据库去除重复数据常用的文章就介绍到这了!


Tags in this post...

Oracle 相关文章推荐
oracle表分区的概念及操作
Apr 24 Oracle
mybatis使用oracle进行添加数据的方法
Apr 27 Oracle
ORACLE数据库应用开发的三十个注意事项
Jun 07 Oracle
Oracle 死锁的检测查询及处理
Sep 25 Oracle
Oracle表空间与权限的深入讲解
Nov 17 Oracle
oracle删除超过N天数据脚本的方法
Feb 28 Oracle
详细聊聊Oracle表碎片对性能有多大的影响
Mar 19 Oracle
Oracle使用别名的好处
Apr 19 Oracle
排查并解决Oracle sysaux表空间异常增长
Apr 20 Oracle
在Oracle表中进行关键词搜索的过程
Jun 10 Oracle
Oracle数据库事务的开启与结束详解
Jun 25 Oracle
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
Jun 28 Oracle
解决Oracle数据库用户密码过期
May 11 #Oracle
Oracle中DBLink的详细介绍
instantclient客户端 连接oracle数据库
清空 Oracle 安装记录并重新安装
SQL试题 使用窗口函数选出连续3天登录的用户
Oracle用户管理及赋权
Apr 24 #Oracle
分析SQL窗口函数之取值窗口函数
Apr 21 #Oracle
You might like
php与php MySQL 之间的关系
2009/07/17 PHP
解析dedecms空间迁移步骤详解
2013/05/15 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
php判断访问IP的方法
2015/06/19 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
jquery 指南/入门基础
2007/11/30 Javascript
javascript eval和JSON之间的联系
2009/12/31 Javascript
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
jQuery实现弹出层效果
2019/12/10 jQuery
解决Vue中使用keepAlive不缓存问题
2020/08/04 Javascript
原生js实现自定义难度的扫雷游戏
2021/01/22 Javascript
[06:42]DOTA2每周TOP10 精彩击杀集锦vol.1
2014/06/25 DOTA
Python字符串和文件操作常用函数分析
2015/04/08 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
python实现猜拳游戏
2020/03/04 Python
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
一道SQL面试题
2012/12/31 面试题
元旦晚会主持词
2014/03/24 职场文书
校运动会广播稿(100篇)
2014/09/12 职场文书
食品委托检验协议书范本
2014/09/12 职场文书
护林员个人总结
2015/03/04 职场文书
2015年教师工作总结范文
2015/03/31 职场文书
超市主管竞聘书
2015/09/15 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL