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 相关文章推荐
使用springboot暴露oracle数据接口的问题
May 07 Oracle
oracle通过存储过程上传list保存功能
May 12 Oracle
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
Jun 21 Oracle
关于Oracle12C默认用户名system密码不正确的解决方案
Oct 16 Oracle
Oracle使用别名的好处
Apr 19 Oracle
排查并解决Oracle sysaux表空间异常增长
Apr 20 Oracle
分析SQL窗口函数之聚合窗口函数
Apr 21 Oracle
在Oracle表中进行关键词搜索的过程
Jun 10 Oracle
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
Jun 28 Oracle
Oracle中日期的使用方法实例
Jul 07 Oracle
解决Oracle数据库用户密码过期
May 11 #Oracle
Oracle中DBLink的详细介绍
instantclient客户端 连接oracle数据库
清空 Oracle 安装记录并重新安装
SQL试题 使用窗口函数选出连续3天登录的用户
Oracle用户管理及赋权
Apr 24 #Oracle
分析SQL窗口函数之取值窗口函数
Apr 21 #Oracle
You might like
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
2014/01/03 PHP
php比较两个绝对时间的大小
2014/01/31 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
Symfony2 session用法实例分析
2016/02/04 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
PHP+redis实现的购物车单例类示例
2019/02/02 PHP
关于可运行代码无法正常执行的使用说明
2010/05/13 Javascript
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
基于jquery的动态创建表格的插件
2011/04/05 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
Vue单文件组件的如何使用方式介绍
2017/07/28 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
python 打印对象的所有属性值的方法
2016/09/11 Python
Django安装配置mysql的方法步骤
2018/10/15 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
社团活动策划书范文
2014/01/09 职场文书
俄罗斯商务邀请函
2014/01/26 职场文书
新学期国旗下演讲稿
2014/05/08 职场文书
战友聚会策划方案
2014/06/13 职场文书
小学感恩教育活动总结
2014/07/07 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
2015毕业寄语大全
2015/02/26 职场文书
学困生转化工作总结
2015/08/13 职场文书