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数据库对long类型字段进行模糊匹配的解决思路
Apr 07 Oracle
oracle表分区的概念及操作
Apr 24 Oracle
oracle通过存储过程上传list保存功能
May 12 Oracle
oracle覆盖导入dmp文件的2种方法
May 21 Oracle
Oracle11g R2 安装教程完整版
Jun 04 Oracle
Oracle 死锁的检测查询及处理
Sep 25 Oracle
Oracle使用别名的好处
Apr 19 Oracle
排查并解决Oracle sysaux表空间异常增长
Apr 20 Oracle
Oracle用户管理及赋权
Apr 24 Oracle
Oracle数据库事务的开启与结束详解
Jun 25 Oracle
oracle设置密码复杂度及设置超时退出的功能
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
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
2015/01/26 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
基于Jquery的开发个代阴影的对话框效果代码
2011/07/28 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
javascript实现英文首字母大写
2015/04/23 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
2018/01/25 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
[01:19:46]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第一场 2月28日
2021/03/11 DOTA
Python实现基于权重的随机数2种方法
2015/04/28 Python
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
python做量化投资系列之比特币初始配置
2018/01/23 Python
python脚本生成caffe train_list.txt的方法
2018/04/27 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
Python将QQ聊天记录生成词云的示例代码
2021/02/10 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
世界领先的在线地板和建筑材料批发商:BuildDirect
2017/02/26 全球购物
法国大使拉杆箱官网:DELSEY Paris
2018/03/20 全球购物
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
Can a struct inherit from another struct? (结构体能继承结构体吗)
2016/09/25 面试题
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
实习指导老师评语
2014/04/26 职场文书
基层党员四风问题自我剖析材料
2014/09/29 职场文书
2014年工程工作总结
2014/11/25 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书