oracle如何某个字段去重复的数据,Oracle 去重复的数据
重复的数据分两种,一种是表中部分字段的重复,一种是两行以上的记录完全一样。
部分字段的重复:
查询不重复的数据SQL:
select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) = 1
部分字段重复数据的删除:
查询重复的数据SQL:
select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1
删除上面查询出的重复的数据:
delete from 表名 a where 字段1,字段2 in
(select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)
以上即是删除查询到的数据,这种删除执行效率低下,数据量大时,不适合。
另一种方法是先将查询到的重复的数据插入到一张临时表,然后对其进行删除,这样,在执行删除的时候就不用再进行一次查询了。
CREATE TABLE 临时表 AS
(select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)
--建立临时表,并将查询到的数据插入其中。
再进行删除操作:
delete from 表名 a where 字段1,字段2 in (select 字段1,字段2 from 临时表);
这种先建临时表再进行删除的操作要比直接用一条语句进行删除高效得多。
以上是把所有的重复的数据全都删除,没有保留重复数据的其中一条记录。
如何保留重复数据的其中一条记录?
在oracle中,有个隐藏了字段为rowid,表中每条记录都有一个唯一的rowid,
如果想保留最新一条记录,可以利用这个字段,保留重复数据中rowid最大的一条记录就可以了
以下括号中是查询出重复数据中rowid最大的一条记录,括号外是查询出除了rowid最大之外的其他重复的数据:
select a.rowid,a.* from 表名 a
where a.rowid !=
(
select max(b.rowid) from 表名 b
where a.字段1 = b.字段1 and
a.字段2 = b.字段2
)
要删除重复数据,只保留最新的一条数据:
delete from 表名 a
where a.rowid !=
(
select max(b.rowid) from 表名 b
where a.字段1 = b.字段1 and
a.字段2 = b.字段2
)
以上即是删除查询到重复的数据,保留最新一条记录,这种删除执行效率低下,数据量大时,不适合。
考虑建立临时表,将需要判断重复的字段,rowid插入到临时表中,然后删除的时候再进行比较。
create table 临时表 as
select a.字段1,a.字段2,MAX(a.ROWID) dataid from 正式表 a GROUP BY a.字段1,a.字段2;
delete from 表名 a
where a.rowid !=
(
select b.dataid from 临时表 b
where a.字段1 = b.字段1 and
a.字段2 = b.字段2
);
完全重复记录的删除:
对于表中两行或以上的记录完全一样的情况,可以使用以下语句获取到去掉重复数据后的记录:
select distinct * from 表名
将查询的记录放进临时表,然后再将原来的表记录删除,最后将临时表的数据导回原来的表中。
CREATE TABLE 临时表 AS (select distinct * from 表名);
truncate table 正式表;
insert into 正式表 (select * from 临时表);
drop table 临时表;
oracle如何某个字段去重复的数据,Oracle 去重复的数据相关推荐
- oracle的PRIPID字段,【学习笔记】Oracle进程调度策略优先级 high_priority_processes案例...
[学习笔记]Oracle进程调度策略优先级 high_priority_processes案例 时间:2016-10-27 21:51 来源:Oracle研究中心 作者:HTZ 点击: 次 ...
- oracle数据库新增字段报错
oracle数据库新增字段报错 需要在oracle数据库中新增一个字段,并且该字段不能为空,执行新增方法,报错 **因为表里面已经有数据了,就不能添加非空列了,除非指定默认值 **或者先将该字段设置为 ...
- oracle 查的数据去重复数据,Oracle查询和过滤重复数据
对数据库某些意外情况,引起的重复数据,如何处理呢? ----------------查重复: select * from satisfaction_survey s where s.as_side = ...
- oracle判断非空并拼接,oracle sql 判断字段非空,数据不重复,插入多跳数据
oracle sql 判断字段非空,数据不重复 select distinct(mobile) from wx_user_mobile where active_time is not null ...
- oracle去重复合计,如何在excel合并同类项数据并求和(去除重复项)
本例主要介绍如何在excel中合并同类项数据,也就是去除某字段数据的重复值,然后将对应的数据求和,方法很简单,也很实用,对于经常使用excel的人员,能大量减少工作量提高工作效率. 操作步骤: 1.首 ...
- mysql怎么计算某个字段重复的个数_2020最新版MySQL数据库面试题(一)
点击上方" 码农编程进阶笔记 ",选择"置顶或者星标" 文末有干货,每天定时与您相约! 为什么要使用数据库 数据保存在内存 优点:存取速度快 缺点:数据不能永久 ...
- oracle导入excel字段超过4000字符数据_产品思考:B端产品中,为什么批量导入功能很重要?...
B端产品的重要价值是提高企业的办公效率,在企业的日常工作中批量录入数据的场景很多,所以批量导入是b端设计中很重要的一个功能.本文作者结合案例,分享了自己关于B端产品批量导入功能的思考. 在做b端产品的 ...
- 【转贴】Oracle查询重复数据与删除重复记录方法
Oracle查询重复数据与删除重复记录方法 比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完全相同的记录查询出来 select p1.* from persons ...
- Mysql数据库查询去除重复_mysql数据库如何去重复数据
mysql数据库去重复数据的方法: 方法一:防止表中出现重复数据 当表中未添加数据时,可以在MySQL数据表中设置指定的字段为PRIMARY KEY(主键) 或者 UNIQUE(唯一) 索引来保证数据 ...
- 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表
前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...
最新文章
- html设置右边界,CSS边界(margin)——CSS实验室
- 【单片机】以输出方波为例的 定时器使用
- WPF实用指南二:移除窗体的图标
- linux 循环shell脚本,shell脚本的使用---for循环
- 平流式隔油池计算_广州隔油池清理公司讲述清理隔油池程序和标准_新闻中心...
- 美国人工智能就业市场全景:开放职位512个,基本工资最高26万美元
- openresty require报错
- MySQL第11天:MySQL索引优化分析之性能分析
- MySQL数据备份方式,及热备与冷备的优缺点
- 电脑销售渠道_为园区企业搭建服务麦格米特,长城电脑等企业产业链销售渠道...
- Mysql(11)——group by的用法
- 基于主观感兴趣区域的视频编码实践
- python列表中随机两个_随机化两个列表并在python中维护顺序
- [css] CSS中的calc()有什么作用?
- maltab求解微分方程
- beta分布的采样或抽样(java程序)
- layout_weight
- 编译器--简单数学表达式计算器(一)
- 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
- 自己写个扩展把Mootools的语法改的和Jquery的语法一模一样