首页 > 数据库 >ORACLE 在缺少主键ID的情况下删除重复数据,只保留一行

ORACLE 在缺少主键ID的情况下删除重复数据,只保留一行

时间:2024-03-26 09:55:06浏览次数:32  
标签:OPER 删除 PARA -- ID ORACLE 主键 SELECT

有时候因未进行数据验证或其他特殊场景,导致数据表中出现重复的数据,需要对重复数据进行删除,并且只保留其中一条。

一、当数据表存在主键时,可使用 ROW_NUMBER 进行排序后删除,参考脚本如下:

  

删除带有主键的重复数据

DELETE FROM DUPLICATES_TABLE
WHERE ID IN (
  SELECT ID
  FROM (
    SELECT ID,
           ROW_NUMBER() OVER (PARTITION BY COLUMN1, COLUMN2 ORDER BY ID) AS ROW_NUM
    FROM DUPLICATES_TABLE
  )
  WHERE ROW_NUM > 1 --只保留第一行,删除其余同ID的重复行
);

  

二、当数据表缺少主键时,可使用 ROWID 进行排序后删除,参考脚本如下:

删除前建议先备份
-- 备份
CREATE TABLE MY_TMNL_EQUIP_PARAM_BACK AS 
SELECT TB.* FROM MY_TMNL_EQUIP_PARAM TB
JOIN (
      SELECT T.OPER_ID,
                     T.PARA_ID,
                     COUNT(T.OPER_ID) SL
              FROM   MY_TMNL_EQUIP_PARAM T
              WHERE  T.PARA_ID IN
                     (SELECT B.CSBS
                      FROM   SB_FKZDCS B)
              GROUP  BY T.OPER_ID, T.PARA_ID
              HAVING COUNT(T.OPER_ID) > 1
              ORDER  BY T.OPER_ID DESC
) TA ON TB.OPER_ID=TA.OPER_ID AND TB.PARA_ID=TA.PARA_ID;
遍历批量删除
--删除
BEGIN
	FOR TTT IN ( --查找出重复数据
             SELECT T.OPER_ID,
										 T.PARA_ID,
										 COUNT(T.OPER_ID) SL
							FROM   MY_TMNL_EQUIP_PARAM T
							WHERE  T.PARA_ID IN
										 (SELECT B.CSBS
											FROM   SB_FKZDCS B)
							GROUP  BY T.OPER_ID, T.PARA_ID
							HAVING COUNT(T.OPER_ID) > 1
							ORDER  BY T.OPER_ID DESC
							
							)
	LOOP --遍历删除(只保留每组重复的第一条)
        --DBMS_OUTPUT.put_line(TTT.OPER_ID);
	      DELETE FROM MY_TMNL_EQUIP_PARAM T WHERE T.OPER_ID=TTT.OPER_ID
        AND ROWID<> --只保留第一行,删除其余相同重复行
        (
             SELECT MIN(ROWID) FROM MY_TMNL_EQUIP_PARAM T1 WHERE T1.OPER_ID=TTT.OPER_ID
        );       
	END LOOP;
  COMMIT;
END;

标签:OPER,删除,PARA,--,ID,ORACLE,主键,SELECT
From: https://www.cnblogs.com/qq564934147/p/18095931

相关文章

  • requests.exceptions.MissingSchema: Invalid URLrequests.exceptions.ConnectionErro
    代码如下,运行时出现 requests.exceptions.ConnectionError:HTTPSConnectionPool(host='www.dropbox.com',port=443):Maxretriesexceededwithurl:/s/dm3m1o0tsv9terq/pytorch_model.bin?dl=1(CausedbyNewConnectionError('<urllib3.connection.HTTPSConne......
  • 嵌入式算法开发系列之pid算法
    文章目录概要一、PID算法原理二、PID算法模型三、PID算法实现方法四、PID算法C语言实现示例五、PID算法在嵌入式系统中的应用小结概要PID(Proportional-Integral-Derivative)控制算法是一种常用的闭环控制算法,广泛应用于嵌入式系统中的控制器设计。今天张工将深入探讨......
  • 解决IntelliJ IDEA中控制台中文乱码问题
       1.Server乱码ideafile-----setting----选择点击Editor—>选择点击General---->选择点击console ideafile-----setting----选择点击Editor----FileEncodings编码均改为UTF-8 改完别忘记点击OKTomcatCatalinaLog/TomcatLocalhostLog乱码在你的idea安装......
  • Fiddler(1)基本介绍以及工作原理
    fiddler基本介绍:Fiddler的官方网站:  www.fiddler2.comFiddler是一个HTTP协议调试代理工具,它能够记录并检查所有客户端和服务器的http和https请求。Fiddler提供了电脑端、移动端的抓包、包括http协议和https协议都可以捕获到报文并进行分析;可以设置断点调试、截取报文......
  • 【重要】Midjourney订阅指南加关键词攻略!
    常见问题Q:Midjourney是什么?A:Midjourney是一款AI制图工具,只要关键字,就能透过AI算法生成相对应的图片,只需要不到一分钟。同时还可以选择不同画家的艺术风格,例如安迪华荷、达芬奇、达利和毕加索等,还能识别特定镜头或摄影术语。Q:Discord是什么?A:是一家游戏聊天应用与社区......
  • ENSP Demo3 VLAN Trunk & Hybrid
    syssysnSW1vlanbatch1020100200intg0/0/1portlink-typetrunkporttrunkallow-passvlan1020100200intg0/0/2portlink-typehybridporthybriduntaggedvlan10100porthybridpvidvlan10intg0/0/3portlink-typehybridporthybridunta......
  • Oracle与MySQL的差异和对比
    Oracle与MySQL的差异和对比:配套hands-on参考脚本。方便客户针对培训课件内容进行动手实践,加强理解。-----------------------------------主题:Oracle与MySQL的差异和对比--一、MySQL的基础特性--二、重要特性差异对比--三、性能对比和优化技巧--------------......
  • IDEA常用代码规范设置
    对开发java时,IDEA的部分常用代码规范进行设置设置前的注意事项写完代码后,Ctrl+Alt+L格式化代码设置完之后,不要忘记Apply确认不要在单个项目中设置,全局设置,请关闭项目,在如图所示处设置代码换行在设置前已经超过代码行宽度限制的代码不会自动换行超过120列换行......
  • Android官方架构组件ViewModel_从前世今生到追本溯源,android插件化开发指南
    ViewModel在对应的作用域内保持生命周期内的局部单例,这就引发一个更好用的特性,那就是Fragment、Activity等UI组件间的通信。3.3更方便UI组件之间的通信一个Activity中的多个Fragment相互通讯是很常见的,如果ViewModel的实例化作用域为Activity的生命周期,则两个Fragment......
  • Dubbo源码解析-Provider服务暴露Export源码解析
    上篇我们介绍了ServiceBean初始化和依赖注入过程,地址如下Dubbo源码-Provider服务端ServiceBean初始化和属性注入-CSDN博客    本文主要针Dubbo服务端服务Export过程,从dubbo源码角度进行解析。    Dubbo服务端暴露细节流程比较长,也是面试过程中比较常问的技......