如何查询数据库重复的用户数据
利用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 )