mysql删除重复记录sql

一、场景

mysql存在了重复记录,需要删除多余的记录,只保留重复记录中的一条。
注意:操作前先备份表数据。

二、删除方式

考虑到重复的记录,分两种情况,一种情况是所有字段值都完全一致的情况(表未定义主键或唯一键时可能出现这种情况),另一种情况是部分字段值有差异;

对于第一种情况,使用distinct关键字,distinct后面将所有字段都列出来,注意涉及时间的字段要加上双引号,不然查询出来的结果是表中的所有记录。

基本思路是:查询出不相同的记录,放在一张临时表(或临时文件中),将原表中的数据删除,再insert临时表中的数据到原表。
将不重复的数据放入临时表,sql如下:
Create TEMPORARY table test_table (SELECT DISTINCT id, source_event_id, “create_date”, “last_modified_date”, feedback_data FROM sync_task);
(也可以通过mysql客户端在执行完SELECT DISTINCT id, source_event_id, “create_date”, “last_modified_date”, feedback_data FROM sync_task)后,通过客户端的导出功能,将结果导出成sql文件,删除原表的记录(delete from 原表),再执行刚才导出去的sql文件

对于第二种情况,简单很多,将原表理解成两张表的关联查询,根据差异字段,将数据拆分到“两张表”,删除不需要的“一张表”即可。
DELETE t1 FROM sync_task t1
INNER JOIN sync_task t2
WHERE t1.create_date > t2.create_date AND t1.id = t2.id;
(注:此案例表中有差异的字段是created_date字段)

三、注意事项
1、一定要做好备份;
2、肯定有更好的方案,请留下一个案例,互相学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值