如何查询数据库重复数据

如何查询数据库重复的用户数据
利用group by + havaing语句快速查询数据表中的重复数据

需要这种情况其实很常见。 比如用户注册时候出现并发,网络卡顿情况下用户连续点了两次登录
这时就会产生一下重复的数据,除了在程序上面做限制之外还需要对之前未处理产生的数据进行清理
这时就该 group by + havaing 上场了

数据表结构

CREATE TABLE `user` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`openid` varchar(30) NOT NULL,
`nickname` varchar(30) NOT NULL,
PRIMARY KEY (`id`),
KEY `openid` (`openid`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
#用户表 (user)数据
id openid nickname 
1 001 比克日志
2 002 xiadmin.com
3 003 百度
4 004 谷歌
5 001 比克日志

查询当前所有存在字段重复的用户,可以用手机号,openid等具有唯一性的字段
我用openid作为唯一性条件,查询重复次数大于1的

SELECT id, openid,nickname FROM `user` WHERE 1 GROUP BY `openid` HAVING COUNT(*) > 1

如图
上图可以知道 `openid=001` 的这条信息是有重复的,但是现在还不能达到效果
因为我们要列出所有重复然后一个个进行处理,这一步只知道这个信息是有重复而已
所以我们在当前基础上再加一个查询即可,一条语句即可查询出所有重复数据

SELECT * FROM `user` WHERE openid IN(
    SELECT `openid` FROM `user` WHERE 1 GROUP BY `openid` HAVING COUNT(*) > 1
)

给TA支持
共{{data.count}}人
人已支持
知道随笔

解锁Nginx防火墙,网站监控报表

2021-8-19 12:03:26

微擎工作日志随笔

微擎 tpl_form_field_video2 组件添加视频封面

2021-10-21 19:09:02

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索