MySQL数据库根据一个或多个字段查询重复数据
2024-10-19 07:28:11
系统在开发测试过程中出现bug,比如并发操作没有处理好,数据库中往往会插入重复数据,这些脏数据经常会导致各种问题。bug可以修改,但是数据往往也要处理,处理SQL如下:
1、根据一个字段查找重复数据
比如,User表中的userName需要保持唯一,查询重复数据的语句如下:
SELECT userName from `User` GROUP BY userName HAVING count(*) > ;
如果要删除重复数据,则根据userName分组获取最大或最小id,然后删除其他数据即可,如下:
DELETE FROM USER WHERE userId NOT IN ( SELECT MAX( userId ) AS maxid FROM `User` GROUP BY userName);
2、根据多个字段查找重复数据
比如,User表中的userName、loginType需要保持数据的唯一性,查询重复数据的语句如下:
SELECT * FROM `User` GROUP BY userName,loginType HAVING count( * ) >
如果要保证数据的唯一性,则分组后查找最大或最小id然后删除其他数据,如下:
DELETE FROM USER WHERE userId NOT IN ( SELECT MAX( userId ) AS maxid FROM `User` GROUP BY userName,loginType );
另外还有一种方法,就是用CONCAT函数把多个字段串联然后查找出需要保留的id,其他数据删除即可,查询语句如下:
SELECT nameAndType from (SELECT CONCAT(userName,loginType) as nameAndType from User) tt GROUP BY nameAndType HAVING count(nameAndType) > ;
删除语句如下:
DELETE FROM USER WHERE userId NOT IN (SELECT maxid from (SELECT MAX(userId) as maxid, CONCAT(userName,loginType) as nameAndType from User GROUP BY nameAndType) t);
以上就是楼主的解决办法,只求解决问题,没有进行SQL优化,希望可以能对大家有所帮助。
最新文章
- UI: 多窗口
- s3c2440 移值u-boot-2016.03 第5篇 支持dm9000 识别
- java线程的理解
- JS获取跨域的cookie实例
- C++中的vector使用范例
- PPTP部署文档
- objectarx 卸载加载arx模块
- 【Android UI】 Shape详解
- JQuery与GridView控件结合示例
- ADO.NET笔记——利用Command对象的ExecuteScalar()方法返回一个数据值
- bzoj3237
- CentOS 7重装mysql编译过程报错解决方法
- zoom与scale的异同
- Java并发编程实践读书笔记(1)线程安全性和对象的共享
- 深挖JDK动态代理(一)
- 【转载】解决gridview空行时不显示的问题
- jvm虚拟机---执行引擎子系统
- C# 读带复选框的excel,写excel并设置字体、边框、背景色
- C#快速找出磁盘内的所有文件
- 11.16 Daily Scrum
热门文章
- 宿主机连接docker中的mysql
- Shell变量的作用域:Shell全局变量、环境变量和局部变量
- Tomcat内部结构、工作原理、工作模式和运行模式
- JWT生成Token做登录校验
- Spring+hibernate+JSP实现Piano的数据库操作---2.Controller+Service+Dao
- ken桑带你读源码 之scrapy
- js POST调用api接口时,由于OPTIONS请求导致服务器异常
- PHP readlink() 函数
- IC行业常见用语
- CF R 630 div2 1332 F Independent Set