MySQL 中删除重复数据 SQL 写法
要在 MySQL 中删除重复的数据并只保留一条,可以使用下面的方法(要用的时候直接复制小改下条件和表名称即即可)
方法一:使用 left join + 子查询删除重复数据(推荐)
温馨提示:本人在 500w 数据下执行此 SQL 耗费 15s-30s 左右
使用 left join (推荐方法删除重复数据,添加唯一组合索引,可以使用,数据量大的也可以)
// 先把历史数据删除,才能够添加唯一的组合索引
DELETE u1
FROM uf_cs_record_batch_detail u1
LEFT JOIN (SELECT MIN(id) AS min_idFROM uf_cs_record_batch_detailGROUP BY cs_contact_name, cs_safe_remark
) u2
ON u1.id = u2.min_id
WHERE u2.min_id IS NULL;
另外在附上添加唯一组合索引的 SQL 写法(很实用):
// 添加组合的唯一索引
ALTER TABLE uf_cs_record_batch_detail ADD UNIQUE KEY idx_uni_contact_safe_stat (cs_contact_name, cs_safe_remark);
方法二:创建临时表(需分多步执行,逻辑清晰,但会改变ID值)
这种方法假设你有一个表 your_table,并且你要基于某些列来判断哪些数据是重复的。
例如,如果你想删除基于 column1 和 column2 的重复记录,只保留一条记录,你可以按照以下步骤操作:
- 使用
CREATE TABLE语句创建一个临时表,用于存储唯一的记录。 - 使用
INSERT INTO ... SELECT语句将唯一的记录插入到临时表中。 - 删除原始表中的所有记录。
- 使用
INSERT INTO ... SELECT语句将临时表中的记录插入回原始表。 - 删除临时表。
以下是一个完整的 SQL 例子:
-- 创建临时表 SQL 参考
CREATETABLE temp_table AS
SELECT*FROM your_table-- 将不重复的数据临时存在这个 temp_table 临时表中
INSERTINTO temp_table
SELECT*FROM your_table t1
WHERE t1.id = (SELECTMIN(t2.id)FROM your_table t2WHERE t1.column1 = t2.column1AND t1.column2 = t2.column2
);-- 然后将源表中的数据删除
DELETEFROM your_table whereWHERE 字段1=值;-- 再将临时表中不重复数据重新写回到源表中
INSERTINTO your_table
SELECT*FROM temp_table;-- 最后删除临时表
DROPTABLE temp_table;
这样,你就成功地删除了原始表中的重复记录,只保留了一条唯一记录。
注意:但是这种方法会改变原来的数据 ID ,所以这种方法看场合使用
方法三:使用 JOIN 自连查询(需要注意性能问题)
为了避免改变原来的数据 ID,我们可以使用一个不同的方法,通过使用自连接来标记重复的数据并删除多余的记录。这种方法在保留原始 ID 的情况下删除重复记录。
假设你的表结构如下:
- 表名:
your_table - 列名:
id(主键),column1,column2, 以及其他列。
你可以使用以下 SQL 来删除重复记录,只保留一条(通常是保留 ID 最小的那一条):
-- Step 1: 标记要删除的重复记录
DELETE t1
FROM your_table t1
INNER JOIN your_table t2
WHERE t1.id > t2.idAND t1.column1 = t2.column1AND t1.column2 = t2.column2;-- Step 2: 确认删除成功,查看剩余数据
SELECT * FROM your_table;
解释:
-标记要删除的重复记录:我们使用自连接 INNER JOIN 来找到重复的记录,并且使用 WHERE t1.id > t2.id 来确保只删除 id 较大的记录,从而保 留 id 最小的记录。
- 确认删除成功:通过 SELECT 语句查看剩余的数据,确保删除操作正确。这个方法的优点是:不会改变原始数据的 ID。保留每组重复记录中 ID 最小的一条记录。操作简单且高效。
小总结
- 使用
left join删除重复数据(推荐使用),适合大数据量,性能 OK - 创建临时表 适合需要重建数据表的场景,适合数据量中等的情况,不过比较繁琐
- 自连查询 能保留最小 ID,适合不想改变 ID 的情况下删除重复数据。
相关文章:
MySQL 中删除重复数据 SQL 写法
要在 MySQL 中删除重复的数据并只保留一条,可以使用下面的方法(要用的时候直接复制小改下条件和表名称即即可) 方法一:使用 left join 子查询删除重复数据(推荐) 温馨提示:本人在 500w 数据下执行此 SQL 耗费 15s-30s…...
docker minio镜像arm64架构
minio版本为RELEASE.2021-09-03T03-56-13Z 原项目信创改造,服务器资源改为了arm64架构,统信uos docker镜像库内没有对应的minio镜像,当前镜像为拉取源码后,自编译打包镜像,亲测可用。 使用方式 将tar包导入到服务器…...
VUE3 监听器(watch)
在 Vue 3 中,监听器(watch)是用来观察响应式数据的变化,并在数据发生变化时执行相应操作的机制。watch 主要用于响应式数据变化时的副作用处理,比如异步操作、数据更新等。 1. 基础使用 在 Vue 3 中,watc…...
CAPL如何设置TCP/IP传输层动态端口范围
在TCP/IP协议中,应用程序通过传输层协议TCP/UDP传输数据,接收方传输层收到数据后,根据传输层端口号把接收的数据上交给正确的应用程序。我们可以简单地认为传输层端口号是应用程序的标识,这就是为什么我们说应用程序在使用TCP/IP协议通信时要打开传输层端口号或者绑定端口号…...
随记:有关Springboot项目中的时间格式实现的几种方式
1.注解 JsonFormat DateTimeFormat import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat;import java.time.LocalDateTime;public class Event {// 序列化和反序列化时生效JsonFormat(pattern "yyyy-MM…...
IntelliJ IDEA 优化设置
针对 Java 开发,IntelliJ IDEA 有许多优化设置,可以帮助提高代码编写、调试、构建和运行的效率。以下是一些针对 Java 开发的优化建议: 1. 增加 JVM 内存和性能优化 增加堆内存: 通过调整 idea.vmoptions 文件,增加 IntelliJ ID…...
jsp企业财务管理系统设计与实现
企业财务管理系统 摘要 对于企业集来说,财务管理的地位很重要。随着计算机和网络在企业中的广泛应用,企业发展速度在不断加快,在这种市场竞争冲击下企业财务管理系统必须优先发展,这样才能保证在竞争中处于优势地位。对此企业必须实现财务管理…...
EscherNet运行笔记
文章标题:EscherNet: A Generative Model for Scalable View Synthesis 1. 环境配置 conda env create -f environment.yml -n eschernet conda activate eschernet 2. 数据下载 wget https://tri-ml-public.s3.amazonaws.com/datasets/views_release.tar.gz 3…...
Java中的反射机制及其应用场景
目录 什么是Java反射机制? 工作原理 主要应用场景 注意事项 总结 什么是Java反射机制? Java反射机制是一种强大的工具,它允许程序在运行时访问、检查和修改其本身的类和对象的信息。通过反射,开发者可以在不知道类的具体实现…...
信息科技伦理与道德3:智能决策
1 概述 1.1 发展历史 1950s-1980s:人工智能的诞生与早期发展热潮 1950年:图灵发表了一篇划时代的论文,并提出了著名的“图灵测试”;1956年:达特茅斯会议首次提出“人工智能”概念;1956年-20世纪70年代&a…...
青少年编程与数学 02-006 前端开发框架VUE 16课题、组件基础
青少年编程与数学 02-006 前端开发框架VUE 16课题、组件基础 一、定义一个组件二、使用组件三、传递 props四、监听事件五、通过插槽来分配内容六、动态组件七、DOM 内模板解析注意事项1、大小写区分2、闭合标签3、元素位置限制 课题摘要:本文介绍了Vue.js中的组件基础…...
25/1/11 算法笔记 Yolov8物体识别
这几天做了给Yolov8检测物体的小任务,今天来做下总结。 首先介绍下整个Yolov8检测的步骤吧,安装库那些就不讲了。 这是我的文件包的对象树。 有images包,里面装了训练和验证的图像。 labels包,装了标注好的labels的txt文件&…...
水水水水水水
为了拿推广卷,但不想把我原本完整的文章拆成零散的多篇,只能出此下策随便发一篇,认真写的都笔记专栏里 网络技术:数字时代的基础设施 在当今社会,网络技术无疑是推动现代生活和经济发展的核心动力之一。从简单的信息传…...
XS5037C一款应用于专业安防摄像机的图像信号处理芯片,支持MIPI和 DVP 接口,内置高性能ISP处理器,支持3D降噪和数字宽动态
XS5037C是一款应用于专业安防摄像机的图像信号处理芯片,支持MIPI和 DVP 接口,最 大支持 5M sensor接入。内置高性能ISP处理器,支持3D降噪和数字宽动态。标清模拟输出支 持960H,高清模拟输出支持HDCCTV 720P/1080P/4M/5M。高度集成…...
机器学习无处不在,AI顺势而为,创新未来
机器学习无处不在: 1、推荐广告和搜索:推广搜不分家,属于数据科学中,对人的行为进行理解 2、计算机视觉CV:对人看到的东西进行理解 3、自然语言处理:对人交流的东西进行理解 4、数据挖掘和数据分析&…...
pandas处理json的相关操作
Pandas 是一个强大的数据处理库,它提供了丰富的功能来处理 JSON 数据。以下是 Pandas 中处理 JSON 的所有常见操作: 1. 读取 JSON 文件 使用 pandas.read_json() 函数可以从 JSON 文件或 JSON 字符串中读取数据。 从 JSON 文件读取 import pandas as …...
linux内存泄露定位过程(kmemleak和slab debug)
1,当遇到内存增加过多时,或者由于内存导致系统oom时我们怎么定位呢,定位时需要确认是内核态还是用户态内存泄露。 排查步骤 top查看VIRT和RES内存 rootubuntu2004:~# top top - 21:05:39 up 7 min, 1 user, load average: 5.01, 4.09, 2.…...
2025年安卓面试复习总结
文章目录 深入理解并熟练运用常用设计模式及反射原理,能够自定义注解及泛型,多次通过设计模式对 app 代码进行高效重构,显著提升代码的可维护性与扩展性。设计模式自定义注解泛型Kotlin泛型 精通多线程原理,对 ThreadPoolExecutor…...
JS scrollIntoView 技巧揭秘:解锁网页流畅交互
文章目录 一.基本概念二.语法和参数基本语法:element.scrollIntoView();参数详解: 三.应用场景和示例场景一:点击目录点位到相应的位置React 示例代码:Vue3 示例代码: 场景二:轮播图定位到指定图片示例代码…...
【Ubuntu 24.04】常见问题解决
1.24开启3D加速黑屏 参考文章:Ubuntu24开机黑屏,VMware卡死,虚拟机繁忙解决方案 没有3D加速就没有动画,所以我们需要开启3D加速,但是直接开启3D加速会黑屏 由于Ubuntu24内部的图形加速驱动异常,因此需要更新…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...
在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...
