ORACLE查询删除重复记录三种方法

2023-11-09

比如现在有一人员表 (表名:peosons)
若想将姓名、身份证号、住址这三个字段完全相同的记录查询出来 

复制代码代码如下:
select p1.*   
from persons  p1,persons  p2   
where p1.id<>p2.id   
and  p1.cardid = p2.cardid and p1.pname = p2.pname and p1.address = p2.address

可以实现上述效果.

几个删除重复记录的SQL语句

1.用rowid方法

2.用group by方法

3.用distinct方法

1。用rowid方法

据据oracle带的rowid属性,进行判断,是否存在重复,语句如下:

查数据:

复制代码代码如下:
select * from table1 a where rowid !=(select max(rowid) 
from table1 b where a.name1=b.name1 and a.name2=b.name2......)

删数据:

复制代码代码如下:
delete  from table1 a where rowid !=(select max(rowid) 
from table1 b where a.name1=b.name1 and a.name2=b.name2......)

2.group by方法

查数据:

复制代码代码如下:
select count(num), max(name) from student --列出重复的记录数,并列出他的name属性 
group by num 
having count(num) >1 --按num分组后找出表中num列重复,即出现次数大于一次

删数据:

复制代码代码如下:
delete from student 
group by num 
having count(num) >1

这样的话就把所有重复的都删除了。

3.用distinct方法 -对于小的表比较有用

复制代码代码如下:
create table table_new as   select distinct *   from table1 minux 
truncate table table1;
insert into table1 select * from table_new;

查询及删除重复记录的方法大全

1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

复制代码代码如下:
select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录

复制代码代码如下:
delete from people 
where peopleId in (select peopleId from people group by peopleId   
having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

3、查找表中多余的重复记录(多个字段) 

复制代码代码如下:
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录 

复制代码代码如下:
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录

复制代码代码如下:
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

(二)

比方说在A表中存在一个字段“name”,而且不同记录之间的“name”值有可能会相同,现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;

复制代码代码如下:
Select Name,Count(*) From A Group By Name Having Count(*) > 1

如果还查性别也相同大则如下:

复制代码代码如下:
Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1

(三)

方法一

复制代码代码如下:
declare @max integer,@id integer
declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0

方法二

"重复记录"有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,
比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

1、对于第一种重复,比较容易解决,使用

复制代码代码如下:
select distinct * from tableName

就可以得到无重复记录的结果集。

如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除

复制代码代码如下:
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp

发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下

假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

复制代码代码如下:
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)

最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

(四)

查询重复

复制代码代码如下:
select * from tablename where id in (
    select id from tablename 
    group by id 
    having count(id) > 1
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORACLE查询删除重复记录三种方法 的相关文章

  • 数据库小白入门最简易版

    一 数据库是什么 数据库的基本概念 1 数据 data 定义 描述事物的符号记录称为数据 不严格的说就是我们平时接触到的一切可视化信息 数据的集合构成了表 表的集合构成了数据库 2 数据库 DB DataBase 定义 是存放数据的仓库 这
  • Linux蓝牙系统(3) Linux 命令

    Linux蓝牙系统 3 Linux 命令 2010 09 27 10 45 44 分类 LINUX Andrew Haung bluedrum 163 com 一 Linux对于蓝牙的支持 参见如下协议图 在HCI界面之上需要软件来实现 1
  • ctf.show web6 sql注入过滤了空格

    ctf show web6 sql注入过滤了空格 开始的页面 是一个登录的页面 随便输入用户名和密码 没有报错之类的 就把账户名和密码都清空了 那就来burpsuit抓包 先用个万能密码 or 1 1
  • 加密 scrapy

    js常见的加密方式 加密在前端开发和爬虫中是经常遇见的 掌握了加密算法且可以将加密的密文进行解密破解的 也是你从一个编程小白到大神级别质的一个飞跃 且加密算法的熟练和剖析也是很有助于帮助我们实现高效的js逆向 下述只把我们常用的加密方法进行
  • Windows服务器怎么才能长时间保持远程桌面不自动断开

    服务器在通过mstsc远程连接后 如果长时间不操作 会自动断开 这种是Windows系统的远程保护机制 但是对于操作服务器来说 这种断开可能会影响到工作效率 那么如何设置才能一直保持连接状态呢 用过Windows自带的远程桌面连接服务可能都
  • Please make sure you have the correct access rights

    使用git克隆 拉取 提交的时候 发现不能操作 提示如下 Please make sure you have the correct access rights fatal Could not read from remote reposi
  • QTP工具简单操作使用说明

    简介 QTP是QuickTest Professional 的简称 是一种自动化测试工具 使用QTP的目的是用它来执行重复的手动测试 主要用于回归测试和测试同一软件的新版本 版本迭代 启动QuickTest 第一次启动QuickTest时
  • go的channel实现归并排序

    func main ch1 create int 1 3 6 待排序的管道1 ch2 create int 2 5 9 待排序的管道2 ch merge ch1 ch2 for c range ch fmt Println c for ru
  • java概述,发展历程

    1 java概述 首先对于刚刚接触java的小白来说 可能连java是什么 为什么叫这么名字都不知道 其实 Java语言是有个曾用名的 叫Oak 而且起这个名字的时候也是很随心的 只是因为看到了窗口外的一颗橡树 歌词 只是因为面向窗外多看了
  • python 合并不同文件夹下名称相同的文件

    转载 https blog csdn net qq 42769683 article details 104565285 utm source app app version 4 10 0 code app 1562916241 uLink
  • 3D 人体姿态估计简述[转]

    转自 3D 人体姿态估计简述 知乎 0 前言 3D Human Pose Estimation 以下简称 3D HPE 的目标是在三维空间中估计人体关键点的位置 3D HPE 的应用非常广泛 包括人机交互 运动分析 康复训练等 它也可以为其
  • 使用Python的Cufflinks库创建三维散点图

    使用Python的Cufflinks库创建三维散点图 在数据可视化中 三维散点图是一种常用的图形展示方式 如果您正在寻找一种方便易用的数据可视化工具来创建三维散点图 那么Cufflinks就是一个不错的选择 Cufflinks是一个基于pl

随机推荐

  • 恕我直言,自从用完Gradle后,有点嫌弃Maven了!速度贼快!

    点击上方蓝色字体 选择 标星公众号 优质文章 第一时间送达 99套Java企业级实战项目 4000G架构师资料 作者 乐百川 点击阅读原文前往 授权转载自 toutiao com i6824937779193971207 相信使用Java的
  • Spring 基于ApplicationEvent、ApplicationEventPublisher、ApplicationListener的事件监听、发布记录

    1 概述 事件发布和订阅具体流程 1 具体要发布的事件 事件中携带发送的数据 2 发送事件 3 监听器 监听发布的事件 获取事件的携带数据 执行业务逻辑 发布 事件作为参数 事件 监听 事件作为参数 例如 使用切面记录系统日志 发送相同类型
  • oracle 9i在线重定义,Oracle 9i中表的在线重定义(转)

    今天遇到要把数据库中的某张表改成分区表 而且该表在别的地方还有其他的注册信息 如果自己手工建一个分区表的替代该表的话 那就得要手工地去执行该表在其他地方的注册 所以不想删除该表再手工创建同名的分区表 想到了Oracle 9i中可以使用在线重
  • gitee上传代码方法(命令)

    第一次上传 创建一个gitee仓库 在 我的电脑 里找到你要上传的文件的位置 在地址栏输入cmd 回车 输入git init 输入git add 输入git commit m 备注信息可更改 输入 git remote add origin
  • C语言中的清屏函数(自己编写)

    在csdn论坛里看到这样一个问题 如何在c语言命令提示下清除屏幕 感兴趣 随查之 有解 include
  • 蓝帽杯半决赛2022

    手机取证 1 iPhone手机的iBoot固件版本号 答案参考格式 iBoot 1 1 1 直接通过盘古石取证 打开 取证大师和火眼不知道为什么都无法提取这个 手机取证 2 该手机制作完备份UTC 8的时间 非提取时间 答案参考格式 200
  • 修炼离线:(五)hbase映射表插入hive

    一 创建hive表 sql drop table if exists ods odsyyy create table if not exists ods odsfff row id string comment 行记录唯一ID 对应ROW
  • Makefile入门二、理解$@、$^和$<

    文章目录 一 理解 lt 的含义 二 举例 三 简提Makefile中打印日志信息 前面简单记录了一下Makefile中helloworld的用法 这次来理解一些 lt 的含义 一 理解 lt 的含义 Makefile中 格式为这样的 ta
  • Spring Roo 实站( 一 )部署安装 & 第一个示例程序

    一 安装 注 可以参与官网spring roo static springsource org spring roo reference html intro html intro exploring sampleROO OPTS http
  • 【Linux 驱动篇(二)】LED 驱动开发

    文章目录 一 Linux 下 LED 灯驱动原理 1 地址映射 1 1 ioremap 函数 1 2 iounmap 函数 2 I O 内存访问函数 2 1 读操作函数 2 2 写操作函数 二 实验程序编写 1 LED 灯驱动程序编写 2
  • 电脑不能开热点的一种可以尝试的解决方法

    1 说明 方法不一定万能 个人情况 win10 以前可以开热点 不知何时起不能再开 会显示 我们无法设置移动热点 2 解决办法 1 管理员方式打开cmd 2 运行命令 netsh int ip reset netsh winsock res
  • 【金融系列】【statsmodels】如何用Python做实证研究?介绍一个功能和STATA很像的Python包,最小二乘,虚拟变量

    博主本科接触的研究主要是公司金融方向的研究 在公司金融的实证研究中 我们的终极目标是建立变量间的因果关系 我们需要识别因果关系 来检验理论 评价政策效果 或作出预测 目前该领域的研究大部分是使用了STATA和R这两种工具来开展研究的 其实作
  • 亲测可用:opencv图片序列转视频

    亲测可用 glob函数可以遍历文件夹下文件 完毕后可在项目目录下生成output avi视频 可以稍作改进 转换的时候显示当前转换图像 include
  • 网络安全专业毕业设计最新最全选题精华汇总-持续更新中

    前言 大家好 这里是海浪学长毕设专题 大四是整个大学期间最忙碌的时光 一边要忙着准备考研 考公 考教资或者实习为毕业后面临的升学就业做准备 一边要为毕业设计耗费大量精力 学长给大家整理了网络安全专业最新精选选题 如遇选题困难或选题有任何疑问
  • 将语雀文档迁移到飞书

    前言 我爬虫课程的文字版内容沉淀在语雀的知识库中 一开始感觉很不错 随着课程一直在卖 很快就超过了200人的限制 我已经是个人版中最高级的会员了 但语雀知识库的协作人数依旧限制在200人 即花钱无法解决问题 先说一下我的需求 我需要一个可以
  • 深度学习之实现图像数据增强

    深度学习之实现图像数据增强 前言 数据增强的意思就是让数据量增多 对于深度学习来说 大的数据量可以训练出更好的深度学习模型 在图像增强方面 我们常用的手段如下 旋转 翻转 缩放 平移 尺度变换 对比度变换 噪声扰动 颜色变换 1 使用ten
  • What the f*ck Python!(中文翻译版)

    What the f ck Python From https github com leisurelicht wtfpython cn 一些有趣且鲜为人知的 Python 特性 Python 是一个设计优美的解释型高级语言 它提供了很多能
  • SPFA 算法模板

    SPFA 代替 Dijkstra 计算最短路 题目 题目链接 题解 SPFA 一般时间复杂度为 O m O m O m 最坏情况下为 O
  • CNN人脸识别项目(dlib+opencv)

    CNN人脸识别 获取数据集 读取数据集 数据预处理 建立模型进行预训练 对图片进行人脸进行检测并进行可视化 总结 思路 一个CNN人脸识别项目首先必不可少的是数据集 获取的方式有网站数据库 PubFig Public Figures Fac
  • ORACLE查询删除重复记录三种方法

    比如现在有一人员表 表名 peosons 若想将姓名 身份证号 住址这三个字段完全相同的记录查询出来 复制代码代码如下 select p1 from persons p1 persons p2 where p1 id lt gt p2 id