创建测试表:

-- 创建test2
CREATE TABLE TEST2
(ID NUMBER(8) PRIMARY KEY NOT NULL,NAME CHAR(8) NOT NULL,AGE NUMBER(8) NULL,SEX CHAR(2) NULL,HOBBY VARCHAR2(200) NULL
);
insert into TEST2 (ID, NAME, AGE, SEX, HOBBY)
values (7, '武器大师', 14, '男', '打野');insert into TEST2 (ID, NAME, AGE, SEX, HOBBY)
values (8, '嫦娥    ', 14, '女', '打野');insert into TEST2 (ID, NAME, AGE, SEX, HOBBY)
values (9, '猴子    ', 14, '男', '吃桃');insert into TEST2 (ID, NAME, AGE, SEX, HOBBY)
values (1, '齐天大圣', 14, '男', '打野');insert into TEST2 (ID, NAME, AGE, SEX, HOBBY)
values (2, '猪八戒  ', 48, '男', '吃货');insert into TEST2 (ID, NAME, AGE, SEX, HOBBY)
values (5, '紫霞仙子', 22, '女', '至尊宝');insert into TEST2 (ID, NAME, AGE, SEX, HOBBY)
values (6, '哇哈哈  ', 34, '女', '睡觉');


**

在这里我以age和hobby两者都重复作为重复条件

**
1、要删除的数据量比较小的话,直接查询出重复的数据,然后delete删除,2个方法:
方法1:

select a.* from test2 a where (a.age,a.hobby) in
(select age,hobby from test2 group by age,hobby having count(1)>1)
and
a.rowid not in
(select min(rowid) from test2 group by age,hobby having count(1)>1);

方法2,利用rowid进行比较删除:

select m.* from test2 m where m.rowid>
(select min(rowid) from test2 n where m.age=n.age and m.hobby=n.hobby);

2、数据量大的话,不但很费时间,还有可能导致数据库卡死,这个时候可以通过创建临时表解决:

create table temp_table
as
select * from
having count(条件)>1 --查询重复的数据,并只显示一条
union all
select * from……
having count(条件)=1

例如:

create table temp_table
as
select * from test2 aa where  aa.rowid in --注意这里是in,不是not in
(select min(rowid) from test2 group by age,hobby having count(1)>1)
--上半部分是查询重复数据,并显示一条
union all
select * from test2 where (age,hobby) in
(select age,hobby from test2 group by age,hobby having count(1)=1);
--下半部分是查询非重复数据

另一种是利用比较rowid的方法,上面已经写过,如下,变换一下:

select * from test2 h where h.rowid in
(select min(rowid) from test2 j where h.age=j.age and h.hobby=j.hobby)
-- 直接查询去重之后的数据

以上是将去重的数据放入创建的临时表中,然后清空数据重复的表:

truncate table test2;

接着将临时表的数据转到目标表:

insert into test2 select * from  temp_table;

最后删除临时表:

drop table temp_table(临时表);

最后的效果:

开始的状态:

Oracle去重数据相关推荐

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

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

  2. oracle去重离子,oracle去重

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

  3. ORACLE去重总结

    ORACLE去重总结 1.通过创建临时表 2.利用rowid 3.利用max或min函数 4.Group By方法(我经常所用的一种方法) ** 1.通过创建临时表 ** 可以把数据先导入到一个临时表 ...

  4. 实验五 oracle高级数据查询技术

    实验五 oracle高级数据查询技术 实验目的:  一.掌握日期型数据的操作技术  二.掌握层次查询技术  三.理解情景查询与翻译查询技术  四.了解统计查询技术 实验内容: 一.日期型数据的操作   ...

  5. Oracle误删除数据的恢复方法

    Oracle误删数据的恢复,分为两种方法:SCN和时间戳两种方法恢复. 一.通过SCN恢复删除且已提交的数据 1.获得当前数据库的SCN号 select current_scn from v$data ...

  6. Oracle 删除数据后释放数据文件所占磁盘空间

    . . . . . 测试的时候向数据库中插入了大量的数据,测试完成后删除了测试用户以及其全部数据,但是数据文件却没有缩小.经查阅资料之后发现这是 Oracle "高水位"所致,那么 ...

  7. spark连接Oracle数据库,Spark通过jdbc采用分区的方式从oracle读数据

    spark通过jdbc可以从oracle中直接读取数据,返回dataframe.有时由于数据量较大,我们可以采用分区方式通过jdbc多线程并行从oracle中读取数据. - oracle中的数据如下 ...

  8. oracle dataguard详解,Oracle DataGuard数据备份方案详解

    Oracle DataGuard是一种数据库级别的HA方案,最主要功能是冗灾.数据保护.故障恢复等. 在生产数据库的"事务一致性"时,使用生产库的物理全备份(或物理COPY)创建备 ...

  9. [导入]在ASP.NET+ORACLE添加数据记录并让ID自动增量

    在ASP.NET+ORACLE添加数据记录并让ID自动增量需要在ORACLE中设序列和触发器即可,切记不是索引,ASP.NET中不管ID,具体如下: 1.建立序列: CREATE SEQUENCE s ...

最新文章

  1. 1107 Social Clusters
  2. NASA发现超级地球,真的适宜居住?
  3. 【Clickhouse】CLICKHOUSE SQL文件等常用语句
  4. java学习二---对象和内存管理
  5. java write阻塞_java socket/output stream writes:他们阻塞?
  6. 如何调用一个windows上的应用程序呢?
  7. 【Git/Github学习笔记】Git分支管理(一)
  8. 20200108每日一句
  9. utm坐标和经纬度转换_【技术】经纬度WGS84地理坐标系转换成CGCS2000坐标系步骤...
  10. STM32F103系列控制的OLED IIC 4针
  11. Pytorch mask:上三角和下三角
  12. 产品心理学:福格行为模型详解与应用
  13. Scrum板与Kanban如何抉择?nzhfnupjr板与按照rrwpjf
  14. websocket错误码盘点
  15. Android桌面老是跳广告,电脑桌面老是弹出广告怎么办?简单3步轻松屏蔽!
  16. oracle的date_add,SQL Server 中add函数到 oracle date add的操作
  17. python 赋值语句
  18. ABAP SY-SUBRC含义
  19. 网络安全需要掌握的知识有哪些?
  20. VS添加命令直接创建pkt文件

热门文章

  1. 一刀工具箱 v8.0.2 新增工具
  2. Grafana 9 正式发布,更易用,更酷炫了!
  3. OSM下载上海市道路地图,并在QGIS显示
  4. Android下进行 Facebook 分享
  5. Android Facebook登录的简单实现
  6. Gi之(二)基础命令
  7. RT1052之IOMUXC
  8. VoNR来了,它到底是什么技术?
  9. Windows 11 “隐藏版”曝光,网友:微软为何要让学生受这种苦?
  10. CodeIgniter 框架路由