MySQL 数据查重、去重的实现语句
有一个表user,字段分别有id、nick_name、password、email、phone。
一、单字段(nick_name)
查出所有有重复记录的所有记录
select*fromuserwherenick_namein(selectnick_namefromusergroupbynick_namehavingcount(nick_name)>1);
查出有重复记录的各个记录组中id最大的记录
select*fromuserwhereidin(selectmax(id)fromusergroupbynick_namehavingcount(nick_name)>1);
查出多余的记录,不查出id最小的记录
select*fromuserwherenick_namein(selectnick_namefromusergroupbynick_namehavingcount(nick_name)>1)andidnotin(selectmin(id)fromusergroupbynick_namehavingcount(nick_name)>1);
删除多余的重复记录,只保留id最小的记录
deletefromuserwherenick_namein(selectnick_namefrom(selectnick_namefromusergroupbynick_namehavingcount(nick_name)>1)astmp1)andidnotin(selectidfrom(selectmin(id)fromusergroupbynick_namehavingcount(nick_name)>1)astmp2);
二、多字段(nick_name,password)
查出所有有重复记录的记录
select*fromuserwhere(nick_name,password)in(selectnick_name,passwordfromusergroupbynick_name,passwordwherehavingcount(nick_name)>1);
查出有重复记录的各个记录组中id最大的记录
select*fromuserwhereidin(selectmax(id)fromusergroupbynick_name,passwordwherehavingcount(nick_name)>1);
查出各个重复记录组中多余的记录数据,不查出id最小的一条
select*fromuserwhere(nick_name,password)in(selectnick_name,passwordfromusergroupbynick_name,passwordhavingcount(nick_name)>1)andidnotin(selectmin(id)fromusergroupbynick_name,passwordhavingcount(nick_name)>1);
删除多余的重复记录,只保留id最小的记录
deletefromuserwhere(nick_name,password)in(selectnick_name,passwordfrom(selectnick_name,passwordfromusergroupbynick_name,passwordhavingcount(nick_name)>1)astmp1)andidnotin(selectidfrom(selectmin(id)idfromusergroupbynick_name,passwordhavingcount(nick_name)>1)astmp2);
以上就是MySQL数据查重、去重的实现语句的详细内容,更多关于MySQL数据查重、去重的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。