Mysql重复数据查重保留一条

例如:t_user 用户表中 username 重复。将username重复的用户查询出来,保留一条数据。

先附上查重的sql以供验证:

SELECT username, count(*) as num FROM t_user GROUP BY username HAVING count(*)>1;

查询结果为:

接下来,就需要将username重复的用户删除到只剩一条记录。

第一步:查询出重复记录中id最小的记录。

SELECT min(id) id, username FROM t_user GROUP BY username HAVING count(*) > 1

结果为:

接下来,以此结果为条件,进行关联查询,将重复数据中,id大于上述结果中id的数据删除。就意味着重复数据只保留了一条。也就是保留下来id最小的那条数据。

最终sql:

delete t_user
from 
t_user,
(
SELECT
   min(id) id,
   username
  FROM
   t_user
  GROUP BY
   username
  HAVING
   count(*) > 1
) t2
where t_user.username = t2.username
and t_user.id > t2.id

最后通过查重sql验证。重复数据为空。

实现了想要的效果~!

如果是多条件的话,只需要在查询条件中添加多个过滤条件就可以了。

例如:用户名、性别、电话同时重复的记录查重保留一条记录。

delete t_user
from 
t_user,
(
SELECT
   min(id) id,
   username,
   sex,
   phone
  FROM
   t_user
  GROUP BY
   username,
   sex,
   phone
  HAVING
   count(*) > 1
) t2
where t_user.username = t2.username
and t_user.sex= t2.sex
and t_user.phone= t2.phone
and t_user.id > t2.id

结束~! 

一切美好的遇见都是命中注定~!

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值