MySQL删除重复数据的解决方案

对于重复的数据,有两种情况:
1️⃣两行数据完全相同
2️⃣某字段相同
3️⃣id不同,其他字段相同


第1️⃣种情况的解决方案:

思路:
1.查出表中所有行,不显示重复行。
2.创建一张临时表,存储查到的新表数据。
3.删除原表数据
4.把临时表的数据插入到原表中。
5.删除临时表

sql:
CREATE TABLE 临时表 AS (SELECT DISTINCT * FROM 原表);

DELETE FROM 原表;

INSERT INTO 原表 (SELECT * FROM 临时表);

DROP TABLE 临时表;


第2️⃣种情况的解决方案:

思路:
1.查出表中有重复的行。
2.创建一张临时表,唯一地存储有重复的数据。
3.删除原表中所有重复的数据
4.把临时表的唯一重复数据插入到原表中。
5.删除临时表

sql:
CREATE TABLE 临时表 AS (SELECT * FROM 原表
GROUP BY 字段1
HAVING COUNT(字段1)>1);

DELETE FROM 原表 WHERE 字段1 IN
(
SELECT * FROM (SELECT 字段1 FROM 原表
GROUP BY 字段1
HAVING COUNT(字段1) > 1) 别名
)

INSERT INTO 原表 (SELECT * FROM 临时表);

DROP TABLE 临时表;


第3️⃣种情况的解决方案:
思路:
1.查出所有记录的最大id(这样就可以过滤掉其他id不同的相同记录),根据任意一个字段分类。(这样查出来的记录就是无重复的整表记录)
2.删除不在记录中的数据(重复的数据)

sql:
DELETE FROM 原表 WHERE id NOT IN (
SELECT * FROM (
SELECT MAX(id) FROM 原表 GROUP BY 字段1) 别名
)
或:
DELETE FROM 原表 WHERE id NOT IN (
SELECT * FROM (
SELECT MIN(id) FROM 原表 GROUP BY 字段1) 别名
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值