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 DGMGRL ORA-16603报错的解决方法(DG Broker)
Apr 06 Oracle
Oracle设置DB、监听和EM开机启动的方法
Apr 25 Oracle
ORACLE数据库应用开发的三十个注意事项
Jun 07 Oracle
RPM包方式安装Oracle21c的方法详解
Aug 23 Oracle
使用Oracle命令进行数据库备份与还原
Dec 06 Oracle
Oracle 多表查询基本语法实例
Apr 18 Oracle
分析SQL窗口函数之聚合窗口函数
Apr 21 Oracle
清空 Oracle 安装记录并重新安装
Apr 26 Oracle
oracle数据库去除重复数据
May 20 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
法压式咖啡之制作法
2021/03/03 冲泡冲煮
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
php实现数据库的增删改查
2017/02/26 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
php依赖注入知识点详解
2019/09/23 PHP
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
2010/05/15 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
jQuery判断指定id的对象是否存在的方法
2015/05/22 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
2015/10/22 Javascript
js简单设置与使用cookie的方法
2016/01/22 Javascript
JavaScript中循环遍历Array与Map的方法小结
2016/03/12 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
2017/01/22 Javascript
浅谈Koa2框架利用CORS完成跨域ajax请求
2018/03/06 Javascript
JS从非数组对象转数组的方法小结
2018/03/26 Javascript
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
Python3实现的画图及加载图片动画效果示例
2018/01/19 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
2019/08/13 Python
python库matplotlib绘制坐标图
2019/10/18 Python
python os.path.isfile()因参数问题判断错误的解决
2019/11/29 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
数学系个人求职信范文
2014/01/30 职场文书
《只有一个地球》教学反思
2014/02/14 职场文书
三八妇女节活动主持词
2014/03/17 职场文书
会计演讲稿范文
2014/05/23 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
蛋糕店创业计划书范文
2014/09/21 职场文书
新员工入职感想
2015/08/07 职场文书