mysql - 如何一次查询出某一字段相同的全部数据
问题描述
问题解答
回答1:假设你的表名是user:
select * from user where name in (select name from user group by name having count(1) > 1);回答2:
select * from user group by (...) having count(*) > 1就足够了,不需要再用in。其实高效什么的你真的想太多了,这属于设计失误,花时间修复一次然后修改表结构防止此类问题再次发生才是正根。
另外这个表没有id,所以你也不能自动删除重复的数据,因为写不出条件,只能再用中间表去倒。
综上,别考虑效率了,手工改正就好。
回答3:SELECT * FROM user AS aWHERE EXISTS (SELECT 1 FROM user AS bWHERE a.name = b.nameGROUP BY nameHAVING COUNT(1) > 1)
由于涉及到全表GROUP BY,所以性能比较低。如果可以修改表结构的话,建议增加一个字段表示该用户名称是否重名,该字段在写入数据的时候就可以判断维护了。
回答4:数据库的世界没有魔法,索引之所以能加快搜索速度就是因为它预先处理了,用延长每次插入更新数据的时间来加快搜索速度,都是有代价的。
回到这个问题,你可以在name上加索引,这样group by就能更高效一点,但是根据你的需求还是要子查询。
不过在name上加索引我觉得不是个健康的做法。如果是我,解决这个问题会做一个定时任务:扫描重名的用户,把ID记录在某个表A上。然后页面上显示时直接把表A拿出来关联用户表即可。之所以这样做还有一个原因就是这个工作并非要做到很严格,和实际有点误差是无妨的。
相关文章:
1. javascript - 类似于天猫和京东,商品详情页上拉查看图文详情,是通过什么方式实现的?2. python - Flask云部署,gunicorn运行成功,但是通过外网端口无法访问3. css3 - 淘宝网上这种抵抗反弹的效果如何做?4. html5 - 请求到了网易云歌曲到在线地址,如何在web页面中播放?5. javascript - 微信小程序限制加载个数6. javascript - 网易云音乐是如何实现a标签href有值不跳转的?7. css3 - 新版支付宝 账单页面滑动时月份栏被下一个月给顶上去是什么效果8. html5 - 自己的H5页面如何集成支付宝支付9. nginx - WordPress绑定了域名后主页依然显示ip,以及WordPress目录问题10. linux - 为公司配置服务器,要求在上面装win7的虚拟机,那我还需要装桌面环境吗?
