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设置DB、监听和EM开机启动的方法
Apr 25 Oracle
mybatis使用oracle进行添加数据的方法
Apr 27 Oracle
使用springboot暴露oracle数据接口的问题
May 07 Oracle
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
Jun 04 Oracle
Oracle 死锁的检测查询及处理
Sep 25 Oracle
Oracle中update和select 关联操作
Jan 18 Oracle
oracle重置序列从0开始递增1
Feb 28 Oracle
Oracle 多表查询基本语法实例
Apr 18 Oracle
分析SQL窗口函数之取值窗口函数
Apr 21 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中addslashes函数与sql防注入
2014/11/17 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
10款实用的PHP开源工具
2015/10/23 PHP
PHP的Yii框架中View视图的使用进阶
2016/03/29 PHP
PHP打印输出函数汇总
2016/08/28 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能
2006/06/26 Javascript
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
JQUBar 基于JQUERY的柱状图插件
2010/11/23 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
jquery移动端TAB触屏切换实现效果
2020/12/22 Javascript
js实现右键自定义菜单
2016/12/03 Javascript
JS使用cookie保存用户登录信息操作示例
2019/05/30 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
JavaScript鼠标悬停事件用法解析
2020/05/15 Javascript
js cavans实现静态滚动弹幕
2020/05/21 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
Python解决走迷宫问题算法示例
2018/07/27 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
python getopt模块使用实例解析
2019/12/18 Python
python os模块在系统管理中的应用
2020/06/22 Python
Python sublime安装及配置过程详解
2020/06/29 Python
西班牙宠物用品和食品网上商店:Tiendanimal
2019/06/06 全球购物
研修第一天随笔感言
2014/02/15 职场文书
知识竞赛活动方案
2014/02/18 职场文书
《二泉映月》教学反思
2014/04/15 职场文书
招股说明书范本
2014/05/06 职场文书
经销商年会策划方案
2014/05/29 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
文艺节目主持词
2015/07/06 职场文书
运动会致辞稿
2015/07/29 职场文书
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
用JS创建一个录屏功能
2021/11/11 Javascript