MySQL|删除mysql数据表内的重复数据记录

删除数据表内重复数据的常规顺序是:创建备份、确定重复记录、编写删除语句

方法一: 借助 inner join

sql 复制代码
DELETE t1 FROM table t1
INNER JOIN table t2 
WHERE t1.id < t2.id AND t1.column1 = t2.column1;
  • table是表名,id是表的唯一标识符,column1是想要根据其删除重复记录的列。这条SQL语句会删除column1列中具有相同值的所有记录,除了id最大的那一条记录。
  • 工作方式是,它会为表中的每个重复的column1值找到id值最小的记录,并将其删除。这样,只有id值最大的记录会被保留下来。

注:在执行操作之前,务必备份数据,以防万一。

方法二: 借助 group by

sql 复制代码
DELETE FROM your_table
WHERE id NOT IN (
    SELECT MAX(id)
    FROM your_table
    GROUP BY column1, column2, ... /* 列出用于判断重复的列 */
);
  • 这条语句会保留每组重复记录中的最大的 id,并删除其他重复记录。column1, column2 为用来判断重复的列名。

注:在执行操作之前,务必备份数据,以防万一。

方法三:借助 临时表

如果数据量很大,删除重复数据可以采用创建临时表的方式,效率更高。

步骤:

  1. 创建一个新的临时表,并将去重后的数据插入到新表中。
sql 复制代码
CREATE TABLE new_table AS
SELECT * FROM old_table
GROUP BY column_to_be_deduplicated;

在这里,new_table 是新创建的临时表的名字,old_table 是原来的表名,column_to_be_deduplicated 是需要去重的列名。

  1. 删除原来的表/修改原来的表名
sql 复制代码
DROP TABLE old_table;
sql 复制代码
RENAME TABLE old_table TO old_table_bak;
  1. 将新的临时表重命名为原来的表名。
sql 复制代码
RENAME TABLE new_table TO old_table;
  • 这种方式是先将去重后的数据插入到一个新的临时表,然后删除旧的表/修改旧表的名字,最后将临时表重命名为旧表的名字,好处是在处理大量数据时,效率会更高。
  • 在第二步的时候不建议采用直接删除旧表的方式,凡是涉及到数据变动的,均需万分谨慎。
相关推荐
猫咪很可爱4 分钟前
Oracle RAC 启动失败排查:私网通信与内核参数优化实战
运维·数据库·oracle
XLYcmy18 分钟前
《数字经济赋能城市低碳治理的路径研究检索报告》审阅与修改指导意见——基于完整检索报告体例的完整性诊断、学术规范核查与方法论纠偏 上
数据库·ai·chatgpt·文心一言·检索·知网·豆包
泡海椒26 分钟前
JQuick-SQL 快速开始:注册内存表并执行查询
数据库·windows·sql
ss2731 小时前
PG实战笔记 | 09 PostgreSQL psql客户端基本操作
数据库·笔记·postgresql
电商API_180079052471 小时前
反向海淘多币种结算:汇率该在哪个时点被冻结
java·开发语言·数据库·跨境电商·1688 api
搞AI的金鱼1 小时前
skill agent workflow的区别
数据库
墨子夕2 小时前
创新的潮汐——从科学发现到资本周期的百年规律(第二卷)
大数据·数据库·人工智能
Y3815326622 小时前
印度电商数据采集教程:用 SerpBase 查 Flipkart/Myntra/Ajio 商品(附代码)
数据库·python
企业数字化笔记2 小时前
多租户配额怎么控制?用量口径、并发预留与超额处理的实现方法
java·数据库·spring boot
roman_日积跬步-终至千里2 小时前
【数据Agent论文·查询与语义|06】RAT-SQL:怎样把问题、表和字段真正关联起来?
数据库·sql·数据分析