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
使用Navicat Premium工具将oracle数据库迁移到MySQL
May 27 Oracle
Oracle以逗号分隔的字符串拆分为多行数据实例详解
Jul 16 Oracle
oracle删除超过N天数据脚本的方法
Feb 28 Oracle
Oracle数据库中通用的函数实例详解
Mar 25 Oracle
详解SQL的窗口函数
Apr 21 Oracle
分析SQL窗口函数之聚合窗口函数
Apr 21 Oracle
oracle数据库去除重复数据
May 20 Oracle
ORACLE中dbms_output.put_line输出问题的解决过程
Jun 28 Oracle
oracle delete误删除表数据后如何恢复
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模块memcached使用指南
2014/12/08 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
2012/02/03 Javascript
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
js动画效果制件让图片组成动画代码分享
2014/01/14 Javascript
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
JS实现随机点名器
2020/04/12 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
[04:19]DOTA2亚洲邀请赛 现场花絮
2015/03/11 DOTA
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
在Python中使用列表生成式的教程
2015/04/27 Python
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
python 不以科学计数法输出的方法
2018/07/16 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
Python实现多进程的四种方式
2019/02/22 Python
Django实现学生管理系统
2019/02/26 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
Python实现LR1文法的完整实例代码
2020/10/25 Python
飞利浦法国官网:Philips法国
2019/07/10 全球购物
简单的JAVA编程面试题
2013/03/19 面试题
师范生教师实习自我鉴定
2013/09/27 职场文书
物流管理专业大学生自荐信
2013/10/04 职场文书
2014年母亲节演讲稿范文
2014/05/07 职场文书
学习党的群众路线对照检查材料
2014/09/29 职场文书
2015年乡镇卫生院工作总结
2015/04/22 职场文书
Go各时间字符串使用解析
2021/04/02 Golang
Python基础学习之奇异的GUI对话框
2021/05/27 Python
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS