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 数据仓库ETL技术之多表插入语句的示例详解
Apr 12 Oracle
快速学习Oracle触发器和游标
Jun 30 Oracle
Oracle安装TNS_ADMIN环境变量设置参考
Nov 01 Oracle
Oracle表空间与权限的深入讲解
Nov 17 Oracle
使用Oracle命令进行数据库备份与还原
Dec 06 Oracle
oracle删除超过N天数据脚本的方法
Feb 28 Oracle
详细聊聊Oracle表碎片对性能有多大的影响
Mar 19 Oracle
排查并解决Oracle sysaux表空间异常增长
Apr 20 Oracle
清空 Oracle 安装记录并重新安装
Apr 26 Oracle
ORACLE中dbms_output.put_line输出问题的解决过程
Jun 28 Oracle
Oracle删除归档日志及添加定时任务
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开发框架总结收藏
2008/04/24 PHP
一个PHP分页类的代码
2011/05/18 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
IE8 兼容性问题(属性名区分大小写)
2009/06/04 Javascript
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
javascript正则表达式总结
2016/02/29 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
2017/04/23 Javascript
JS异步函数队列功能实例分析
2017/11/28 Javascript
vue-cli3 从搭建到优化的详细步骤
2019/01/20 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
js中switch语句的学习笔记
2020/03/25 Javascript
详解微信小程序工程化探索之webpack实战
2020/04/20 Javascript
python读取html中指定元素生成excle文件示例
2014/04/03 Python
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
Python 如何访问外围作用域中的变量
2016/09/11 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
selenium+python实现自动登录脚本
2018/04/22 Python
python 字符串常用函数详解
2019/09/11 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
python中的错误如何查看
2020/07/08 Python
css3 矩阵的使用详解
2018/03/20 HTML / CSS
美国真皮手袋品牌:GiGi New York
2017/03/10 全球购物
期末学生评语大全
2014/04/24 职场文书
骨干教师考核方案
2014/05/09 职场文书
mysql数据库入门第一步之创建表
2021/05/14 MySQL