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

简述

最近在做一个项目,涉及到需要同步远端数据库的数据到本地,由于误操作导致数据库里面的数据出现重复(冗余)
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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值