mysql删除重复数据只保留一条

时间:2022-09-22 22:51:10

简述

最近在做一个项目,涉及到需要同步远端数据库的数据到本地,由于误操作导致数据库里面的数据出现重复(冗余)
ps: 由于数据量比较大,最后发现冗余了几万条记录
so 手动删除,呵呵
// 下面将以简单的例子来说明下如何处理这个 case

举个栗子

以mysql数据库为例:在数据库中建立数据表 [prefix_]article
// 冗余表现在aid这列上,部分值出现了重复
另外,主要是考虑到想在aid上建立一个唯一的索引,也实现部分查询优化

id aid
1 1
2 2
3 3
4 3
5 4
6 4
7 4
8 5
9 5
10 6
......
-- aid 建立 unique index
create unique index article_aid_unique on article(aid);

问题分析

在mysql命令行中执行上面的sql语句,将报有重复值在aid列的错误,导致
unique index 无法建立,原因很简单aid列有重复值存在
需要做的是:处理数据表的数据,删除重复的数据只保留一条

问题处理

-- 思路:prefix_article自身连接,根据相同的aid匹配,然后根据主键id过滤, 形成并列的and条件,删除即可
delete a1 from prefix_article a1, prefix_article a2 where a1.aid = a2.aid and a1.id > a2.id;
-- 注意这个小于号也是可以的
delete a1 from prefix_article a1, prefix_article a2 where a1.aid = a2.aid and a1.id < a2.id;

ps

-- sql distinct 语法
select count (distinct aid) from article;