ORACLE去重总结

  • 1、通过创建临时表
  • 2、利用rowid
  • 3、利用max或min函数
  • 4、Group By方法(我经常所用的一种方法)

**

1、通过创建临时表

**

可以把数据先导入到一个临时表中,然后删除原表的数据,再把数据导回原表,SQL语句如下:

creat table tbl_tmp (select distinct* from tbl);truncate table tbl;
//清空表记录insert into tbl select * from tbl_tmp;//将临时表中的数据插回来。
这种方法可以实现需求,但是很明显,对于一个很大表,这种方法很慢,在生产系统中,这会给系统带来很大的开销,不可行。

2、利用rowid

在oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会相同。SQL语句如下:

delete from tbl where rowid in (select a.rowid from tbl a,
tbl b where a.rowid>b.rowid and a.col1=b.col1 and a.col2 = b.col2)
如果已经知道每条记录只有一条重复的,这个sql语句适用。但是如果每条记录的重复记录有N条,这个N是未知的,就要考虑适用下面这种方法了。

3、利用max或min函数

这里也要使用rowid,与上面不同的是结合max或min函数来实现。SQL语句如下

delete from tbl awhere rowid not in (select max(b.rowid)
from tbl b where a.col1=b.col1 and a.col2 = b.col2);
//这里max使用min也可以
或者用下面的语句

delete from tbl awhere rowid<(select max(b.rowid)
from tbl b where a.col1=b.col1 and a.col2 = b.col2);
//这里如果把max换成min的话,前面的where子句中需要把"<“改为”>"
跟上面的方法思路基本是一样的,不过使用了group by,减少了显性的比较条件,提高效率。SQL语句如下:

deletefrom tbl where rowid not in (select max(rowid)
from tbl tgroup by t.col1, t.col2);delete from tbl where (col1, col2)
in (select col1,col2 from tblgroup bycol1,col2havingcount(*)

1)and rowidnotin(selectnin(rowid)fromtblgroup bycol1,
col2havingcount(*) >1)
还有一种方法,对于表中有重复记录的记录比较少的,并且有索引的情况,比较适用。假定col1,col2上有索引,并且tbl表中有重复记录的记录比较少,SQL语句如下4、利用group by,提高效率

4、Group By方法(我经常所用的一种方法)

一、查数据
Select count(Num) ,max(Name) from student --列出重复记录,并列出属性
Group By Name
Having count(Num) >1 --按Name分组后找出表中Num列重复,即出现次数大于1

二、删数据
Delete from student Group By Name Having count(Num) > 1
————————————————

原文链接:https://blog.csdn.net/greytree/article/details/1671615

ORACLE去重总结相关推荐

  1. Oracle去重查询实例

    Oracle去重查询实例 今天工作中遇到了一个关于去重的查询,琢磨了半天,终于想明白了,这里简单记录一下. distinct函数 说到去重,可能第一反应就是distinct函数,但其实distinct ...

  2. oracle去重离子,oracle去重

    oracle去重 create table tmp_table3 as (SELECT seqno FROM (SELECT t.seqno,ROWID, ROW_NUMBER() OVER(PART ...

  3. oracle只存两天的数据,Oracle去重而保存时间最新的数据

    Oracle去重而保存时间最新的数据本篇文章仅仅是我工作上的一个随笔记录,写的不是很详细,如果不了解我所做的工作的业务内容,可能会看的一头雾水.大家可以仅做为一种参考思路! 场景描述: 单据表 fdc ...

  4. ORACLE去重排序

    ORACLE去重排序 SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY STATION_NAME ORDER BY ID DESC) RNO,S ...

  5. oracle去重等基础问题

    --去重查询方法一:根据id select * from sxe where id in(select min(id) from sxe group by username) order by id ...

  6. oracle 去重_超详细的四类数据库去重实现方案汇总,值得收藏

    概述 今天主要闲聊Oracle.MySQL.sqlserver.pg数据库在删除重复数据时是怎么实现的,仅供参考. 一.Oracle数据库去重 1.环境准备 可以看到"ALLEN" ...

  7. oracle去重差个数,多表查询 - Oracle 查询技巧与优化_数据库技术_Linux公社-Linux系统门户网站...

    前言 上一篇blog介绍了Oracle中的单表查询和排序的相关技巧,本篇blog继续介绍查询中用的最多的--多表查询的技巧与优化方式,下面依旧通过一次例子看一个最简单的多表查询. 多表查询 上一篇中提 ...

  8. oracle去重差个数,oracle去重

    我们在实际工作中,当信息系统数据质量不高的时候,可能存在数据表中有重复记录的问题.方法: 1.保留重复记录中的一条 delete from t where   rowid   not   in   ( ...

  9. oracle 去重效率最高,oracle去重整理

    我们在实际工作中,当信息系统数据质量不高的时候,可能存在数据表中有重复记录的问题.方法: 1.保留重复记录中的一条 delete from t where   rowid   not   in   ( ...

最新文章

  1. jquery发送put请求_浅谈GET,POST,PUT发送请求
  2. 最新安卓系统细节曝光:后盖手势控制、浮雕式UI、隐私保护.....本月更新!
  3. java inputstream 回退_系统学习 Java IO (十)----回退流 PushbackInputStream
  4. UA MATH523A 实分析1 集合论基础6 一些点集拓扑基本概念
  5. input placeholder的样式
  6. Java 的单例模式
  7. Java实现将文件或者文件夹压缩成zip
  8. linux C 中的volatile使用【转】
  9. matlab meshgrid
  10. android 按下缩小效果松开恢复_22省份三季报:粤苏总量差距缩小,19省份实现正增长...
  11. 怎么查看SAP用户化指南(SPRO --> SAP参考IMG)里各个功能的事务代码
  12. 用批处理共享打印机电脑设置
  13. 制作MHDD启动U盘
  14. android 上运行python脚本,Android上执行python脚本-QPython
  15. 201871010133-赵永军《面向对象程序设计(java)》第一周学习总结
  16. ps快速切图,文件命名图片自动导出
  17. 某校2019专硕编程题-前10名学生成绩
  18. BlackHoleDAO能否点燃DeFi3.0用户激情
  19. ios 反编译 破解
  20. 今日头条 ANR 优化实践系列分享 - 实例剖析集锦

热门文章

  1. 诺基亚E71用二维码验机器,电池,数据线终极教程
  2. PX4从放弃到精通(六):PX4姿态控制代码解析
  3. 我的第一个WinCE驱动--流式驱动【转】
  4. 【十一、wordpress优化之六:CDN加速,以腾讯CDN为例】2021最详细wordpress博客建站教程(2021.03.03更新)
  5. ChatGPT之父Sam Altman28岁从YC创始人保罗·格雷厄姆手中继任总裁,37岁震惊全球
  6. UE4 回合游戏项目 11- 添加人物攻击动画
  7. video标签播放本地视频只有声音没有图像的解决办法-视频转码格式工厂或FFmpeg
  8. c语言桥牌游戏,桥牌游戏规则
  9. 山东省2022 年专升本 计算机大纲(新一代信息技术)
  10. 2022年江苏专转本计算机基础真题