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 05 Oracle
Oracle 区块链表创建过程详解
May 15 Oracle
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
Jun 21 Oracle
RPM包方式安装Oracle21c的方法详解
Aug 23 Oracle
Oracle 触发器trigger使用案例
Feb 24 Oracle
Lakehouse数据湖并发控制陷阱分析
Mar 31 Oracle
instantclient客户端 连接oracle数据库
Apr 26 Oracle
解决Oracle数据库用户密码过期
May 11 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 Socket写的POP3类
2013/10/30 PHP
php过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
利用JS进行图片的切换即特效展示图片
2013/12/03 Javascript
Javascript中设置默认参数值示例
2014/09/11 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
基于vue2.0实现的级联选择器
2017/06/09 Javascript
JavaScript之Canvas_动力节点Java学院整理
2017/07/04 Javascript
JS闭包的几种常见形式实例详解
2017/09/16 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
2019/08/20 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
2020/11/11 Javascript
[36:17]DOTA2上海特级锦标赛 - VGL音乐会全集
2016/03/06 DOTA
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
Python3爬楼梯算法示例
2019/03/04 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
Python3并发写文件与Python对比
2019/11/20 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
英国花园、DIY、电器和家居用品商店:Robert Dyas
2019/03/18 全球购物
贺卡寄语大全
2014/04/11 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
2014村党支部书记党建工作汇报材料
2014/11/02 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
军训通讯稿范文
2015/07/18 职场文书
幼儿园安全管理制度
2015/08/05 职场文书
Java面试题冲刺第十五天--设计模式
2021/08/07 面试题
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers