MYSQL单表删除重复的数据方法

先简述遇到的问题:我要删除一张表的数据,先是查询到所有的重复的数据id直接进行删除操作,但是一直执行不完(一直执行就是删除不完)

DELETE FROM table WHERE id IN (
    SELECT MAX(id) id from table 
    where rId is not null and vId is not null GROUP BY rtId,vId HAVING COUNT(*) >1
    )

 1.最简单那快速的方法(这个是我删除之后找到方法,相对简单方便):

删除标题重复的旧记录。(居然要加这么多层,还需要在里面加一个别名才可以。)

delete from theTable where id in
(select id from (select min(id) id from theTable group by title HAVING count(*)>1) ids
) ;

2.使用临时表(我使用的时候无效)

  • 创建一个临时表,用于存储要保留的数据。
CREATE TABLE bus_mark_plat_ver_tmp LIKE bus_mark_plat_ver;
  • 将要保留的数据存储到临时表中
INSERT INTO bus_mark_plat_ver_tmp
SELECT MAX(id) AS id,sys_code,version_code,mark_id
FROM mng_navigation_banner_plat_ver
GROUP BY sys_code, version_code, mark_id;
  • 删除原表中的数据
delete from  bus_mark_plat_ver
  • 将临时表中的数据加入到原表中
INSERT INTO bus_mark_plat_ver
SELECT  id,sys_code,version_code,mark_id
FROM mng_navigation_banner_plat_ver_tmp;
  • 删除临时表
DROP TABLE bus_mark_plat_ver_tmp;

创建临时表的优点:

  • 简单直观:通过创建临时表,您可以明确地将要删除的数据和要保留的数据分开存储,易于理解和管理。
  • 可读性好:临时表的使用可以使查询语句更易读,特别是对于复杂的逻辑操作。
  • 可以灵活处理:临时表可以在多个查询之间使用,可以执行额外的操作,例如插入、更新或查询临时表的数据。

创建临时表的缺点:

  • 需要额外的存储空间:创建临时表需要占用额外的存储空间,特别是在处理大量数据时可能会对磁盘空间造成一定的压力。
  • 需要额外的操作及权限:创建、插入和删除临时表需要执行额外的数据库操作,增加了一定的复杂性。

3.使用left join 删除(这个是我使用删除的方法推荐,但是有点复杂) 

DELETE t1 
FROMbus_mark_plat_ver t1LEFT JOIN ( SELECT MAX( id ) AS max_id, sys_code, version_code, mark_id FROM bus_mark_plat_ver GROUP BY sys_code, version_code, mark_id ) t2 ON t1.sys_code = t2.sys_code AND t1.version_code = t2.version_code AND t1.mark_id = t2.mark_id AND t1.id = t2.max_id 
WHEREt2.max_id IS NULL;

这个查询将根据sys_type、bus_type和mark_type进行分组,并保留每个组中的最大id。然后,它使用左连接将原始表与这些最大id进行比较。如果连接失败(即max_id为NULL),则表示该行不是具有最大id的行,因此将被删除。

LEFT JOIN的优点:

  • 可以利用索引:LEFT JOIN 可以利用索引来加速查询,特别是在连接字段上存在索引的情况下。
  • 更高的灵活性:LEFT JOIN 可以与其他表达式和条件组合使用,使得查询可以更加灵活。

LEFT JOIN的缺点:

  • 性能可能受限:当处理大量数据时,LEFT JOIN 可能会导致较慢的查询速度,尤其是在连接字段没有索引或使用了复杂的连接条件时。
  • 查询复杂度高:使用 LEFT JOIN 进行连接查询时,需要编写较为复杂的查询语句,对于新手而言可能会比较困难。

 4.使用not in 删除

DELETE 
FROMbus_mark_plat_ver t1 
WHEREid NOT IN ( SELECT max_id FROM ( SELECT MAX( id ) AS max_id FROM bus_mark_plat_ver GROUP BY sys_code, version_code, mark_id ) tmp );

NOT IN的优点:

  • 简单易用:NOT IN 是一种直观简单的方式来筛选出不在指定列表中的数据。
  • 可读性好:NOT IN 子句的语义明确,易于理解和维护。

NOT IN的缺点:

  • 性能可能较低:NOT IN 子查询对于大型数据集可能会导致较慢的查询速度,尤其是在子查询中返回大量结果时。
  • NULL 值处理:NOT IN 子句在处理 NULL 值时需要特别注意,因为 NULL 的处理可能会导致意外的结果。

结论 

根据具体情况选择最合适的方法。如果性能和存储空间是主要关注点,并且查询逻辑相对简单,可以考虑使用 LEFT JOIN 或 NOT IN 来处理重复数据。如果可读性和操作灵活性更重要,并且处理逻辑相对复杂,创建临时表可能是更好的选择。无论使用哪种方法,请务必在生产环境之前进行充分的测试和验证。我们在此推荐使用第二种方法来删除重复数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/236545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P2089 烤鸡

烤鸡 题目背景 猪猪 Hanke 得到了一只鸡。 题目描述 猪猪 Hanke 特别喜欢吃烤鸡(本是同畜牲,相煎何太急!)Hanke 吃鸡很特别,为什么特别呢?因为他有 10 10 10 种配料(芥末、孜然等&#xff…

Vue 官方周报 #124 - 使用JSDoc记录组件属性

Hi &#x1f44b; 当你将鼠标悬停在IDE中的组件上时&#xff0c;显示组件属性所对应的描述&#xff0c;这个功能在开发过程中会很有用。你可以在传递给defineProps函数的TypeScript接口中使用JSDoc来实现这一点&#xff1a; MyComponent.vue <script setup lang"ts&…

【音视频 | AAC】AAC格式音频文件解析

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

ffplay工具

在编译ffmpeg时&#xff0c;如果系统中包含了SDL库&#xff0c;则会默认编译生成ffplay工具&#xff0c;否则无法生成ffplay工具。 ffplay即可以作为播放器&#xff0c;也可以作为很多图像化音视频数据的分析工具&#xff0c;通过它可以看到视频图像的运动估计方向、音频数据的…

大创项目推荐 深度学习 植物识别算法系统

文章目录 0 前言2 相关技术2.1 VGG-Net模型2.2 VGG-Net在植物识别的优势(1) 卷积核&#xff0c;池化核大小固定(2) 特征提取更全面(3) 网络训练误差收敛速度较快 3 VGG-Net的搭建3.1 Tornado简介(1) 优势(2) 关键代码 4 Inception V3 神经网络4.1 网络结构 5 开始训练5.1 数据集…

Python知识(1/20):变量、表达式、什么是程序?

23年是AI井喷的一年&#xff0c;我对AI的态度是恐惧的&#xff0c;以往我只需要CRUD就能需要的工作&#xff0c;AI能够编写出来&#xff0c;虽然现在还有很多缺陷&#xff0c;但是我比较喜欢向前看&#xff0c;在我未来我感觉我能遇到我被AI替代的那天。 我该怎能么办呢&#…

基于APB总线的SM4密码协处理器实现(附Verilog代码)

基于APB总线的SM4密码协处理器实现&#xff08;附Verilog代码&#xff09; 本文内容摘要理论依据和设计内容SM4分组密码算法APB_slave协处理器 测试过程与结果调试经历测试结果SM4.0部分测试APB协处理器部分测试 整体代码 本文内容摘要 本文使用Verilog语言实现SM4加密协处理器…

智能养殖解决方案:如何利用485转WiFi无线路由

随着科技的发展&#xff0c;智能养殖已经成为了一种新兴的生产方式。智能养殖不仅可以提高养殖效率和质量&#xff0c;还可以减少资源浪费和环境污染。其中&#xff0c;485转WiFi无线路由器作为智能养殖解决方案中的重要组成部分&#xff0c;发挥着关键的作用。以下将从三个方面…

多维时序 | MATLAB实现BiTCN-Multihead-Attention多头注意力机制多变量时间序列预测

多维时序 | MATLAB实现BiTCN-Multihead-Attention多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现BiTCN-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | MATLAB实现BiTCN-Multihea…

IP子网划分【专题突破】

1、IP地址基础 IPv4地址是32位&#xff0c;采用点分十进制方式表示&#xff0c;其次必须掌握二进制的转换。 IPv6地址是128位&#xff0c;采用冒号分隔的十六进制表示方法。 2、IP地址的分类 RFC1918规定的私有地址 A类地址范围&#xff1a;10.0.0.0-10.255.255.255(1个A类…

EasyExcel使用: RGB字体,RGB背景颜色,fillForegroundColor颜色对照表

EasyExcel使用: RGB字体&#xff0c;RGB背景颜色&#xff0c;fillForegroundColor颜色对照表 使用EasyExcel导出表格可能会对字体颜色和单元格背景颜色进行自定义的修改。 可以自定义字体颜色或者每个单元格的颜色 要想自定义颜色&#xff0c;需要重写CellWriteHandler接口&am…

java使用websocket搭建客户端和服务端

maven <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.5.4</version> </dependency>客户端 package demo.wsdemo;import java.net.URI; import java.net.URISyntaxE…

CAS为什么还存在线程安全问题(从所谓的ABA问题再学CAS)

概述 之前学习 CAS&#xff0c;从 Java 代码层面知道其原理&#xff0c;借助一条 CPU 原子指令&#xff0c;通过不断地自旋去比较&#xff08;compare&#xff09;和&#xff08;and&#xff09;赋值&#xff08;set&#xff09;。当时对线程安全的认知停留在将多条 Java 语句…

171235-71-5介绍TACE (ADAM17) 抑制剂

本文介绍TACE (ADAM17) 抑制剂的生物学特性&#xff0c;其在生物学中的应用&#xff0c;以及其对生物医学领域的影响。我们将深入探讨这种抑制剂的化学结构、作用机制、生物活性的应用。 一、TACE (ADAM17) 抑制剂的概述 TACE (ADAM17)&#xff0c;也被称为整合素相关跨膜蛋白…

数据管理平台Splunk Enterprise本地部署结合内网穿透实现远程访问

文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 Splunk Enterprise是一个强大的机器数据管理平台&#xff0c;可帮助客户分析和搜索数据&#xff0c;以及可视化数据…

rust为什么是系统编程语言

Rust 被称为系统编程语言&#xff0c;而其他语言可能不被称为系统编程语言&#xff0c;是因为 Rust 在设计上注重提供与底层系统交互和控制的能力&#xff0c;并且在内存管理、并发性和性能等方面具有特定的优势。 以下是一些原因&#xff1a; 1. **内存管理&#xff1a;** R…

骑砍战团MOD开发(23)-呼延灼连环铁骑

骑砍1战团mod开发-呼延灼连环铁骑踏平卡拉迪亚大陆_哔哩哔哩_bilibili 一.铁骑初始化 (0, 0, ti_once, [],[(try_for_agents, ":agent_no"),(agent_get_troop_id, ":agent_troop_id", ":agent_no"),(agent_get_horse, ":agent_horse"…

二维码智慧门牌管理系统升级的重要性与功能

文章目录 前言一、系统的双重作用二、系统的挑战与未来发展三、结论与未来展望四、为未来智慧管理铺平道路 前言 随着科技不断进步&#xff0c;智能化管理已贯穿于我们日常生活的各个领域。其中&#xff0c;二维码智慧门牌管理系统升级解决方案因其独特的考核评估系统和实用功…

qprocess启动的窗口,不关再点击主窗口会无响问题(1)

start启动的 if (link.contains(".exe")) { QString program "cmd.exe"; QStringList arguments; arguments << "/c" << "start" << link; process.star…

基于红外传感的野外变压站生物入侵检测系统(论文+源码)

1. 系统设计 本课题为基于红外传感的野外变压站生物入侵检测系统&#xff0c;主要是针对野外变压站生物入侵的问题进行设计&#xff0c;整个系统的框图如图经过上述的功能需求分析和各个关键模块的选型后&#xff0c;最终得到了如图2.1所示的&#xff0c;采用STC89C52单片机为…