系统在开发测试过程中出现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优化,希望可以能对大家有所帮助。

MySQL数据库根据一个或多个字段查询重复数据的更多相关文章

  1. oracle 根据字段查询重复数据

      1.情景展示 由上图可知,APPUSERID字段和VIRTUAL_CARDID字段存在一对多的关系,如何将重复的APPUSERID字段的数据查询出来呢? 2.原因分析 先查出重复的APPUSERI ...

  2. oracle 按某个字段查询重复数据

    /* 手机号为重复的会员,获取其最大会员id,对应的会员信息 */ SELECT * FROM MEMBER a WHERE a.member_id IN ( SELECT MAX(member_id ...

  3. MySQL数据库添加一个字段

    MySQL数据库添加一个字段 1.添加一个字段 alter table tableName add 列名  数据类型; 2.添加一个字段设置默认值 alter table tableName add ...

  4. MySQL查询表中某个字段的重复数据

    1. 查询SQL表中某个字段的重复数据 SELECT user_name,COUNT(*) AS count FROM db_user_info GROUP BY user_name HAVING c ...

  5. orcl数据库查询重复数据及删除重复数据方法

    工作中,发现数据库表中有许多重复的数据,而这个时候老板需要统计表中有多少条数据时(不包含重复数据),只想说一句MMP,库中好几十万数据,肿么办,无奈只能自己在网上找语句,最终成功解救,下面是我一个实验 ...

  6. 可以自动安装mysql数据库的一个shell脚本

    发布:thatboy   来源:脚本学堂     [大 中 小] 分享一例shell脚本,可以实现mysql数据库的自动安装,脚本写的不错,无论是用来学习,还是生产环境中应用,都是不错的,有需要的朋友 ...

  7. C#连接mysql数据库的一个例子和获取本机IP的方法

    本例子是一个最初级直接连接mysql数据库的例子,实现了往数据库插入数据的操作: string MyConnectionMysql="Server=localhost;Datbase=xxx ...

  8. 如何给mysql数据库添加一个用户

    首先以root身份登录到MySQL服务器中. $ mysql -u root -p 当验证提示出现的时候,输入MySQL的root帐号的密码. 创建一个MySQL用户 使用如下命令创建一个用户名和密码 ...

  9. MYSQL 数据库名、表名、字段名查询

    //查询所有表的所有字段: select * from information_schema.columns where table_name='sys_users' 效果: //查询指定表的所有字段 ...

随机推荐

  1. python爬虫实践——爬取“梨视频”

    一.爬虫的基本过程: 1.发送请求(请求库:request,selenium) 2.获取响应数据()服务器返回 3.解析并提取数据(解析库:re,BeautifulSoup,Xpath) 4.保存数据 ...

  2. 【扩展推荐】Intervention/image 图片处理

    Intervention/image 是为 Laravel 定制的图片处理工具, 它提供了一套易于表达的方式来创建.编辑图片. 一.环境要求 二.安装及配置 下载地址:https://packagis ...

  3. MySQL在同一个表上,删除查询出来的结果

    背景 有一个程序员员工表(code_user),包含用户id.姓名.掌握的语言. 表数据如下: +---------+-----------+----------+ | user_id | user_ ...

  4. PHP set_exception_handler() 函数

    定义和用法 set_exception_handler() 函数设置用户自定义的异常处理函数. 该函数用于创建运行期间的用户自己的异常处理方法. 该函数返回旧的异常处理程序,如果失败则返回 NULL. ...

  5. PHP is_executable() 函数

    定义和用法 is_executable() 函数检查指定的文件是否可执行. 如果文件可执行,该函数返回 TRUE. 语法 is_executable(file) 参数 描述 file 必需.规定要检查 ...

  6. CF 878E Numbers on the blackboard 并查集 离线 贪心

    LINK:Numbers on the blackboard 看完题觉得很难. 想了一会发现有点水 又想了一下发现有点困难. 最终想到了 但是实现的时候 也很难. 先观察题目中的这个形式 使得前后两个 ...

  7. 面试官:怎么做JDK8的内存调优?

    面试官:怎么做JDK8的内存调优? 看着面试官真诚的眼神,心中暗想看起来年纪轻轻却提出如此直击灵魂的问题.擦了擦额头上汗,我稍微调整了一下紧张的情绪,对面试官说: 在内存调优之前,需要先了解JDK8的 ...

  8. Centos8最小化部署安装OpenStack Ussuri

    #!/bin/bash #Centos8最小化部署安装OpenStack Ussuri #共两台主机,分别是一台控制节点,一台计算节点 #.控制节点内存4096M.双网卡,分别为eth0:10.0.0 ...

  9. tensorboard报错:AttributeError: ‘Value’ object has no attribute ‘metadata’

    tensorboard的网页可以访问,但是只能观察到graph数据,但是观察不到scalars数据. 原因:tensorflow版本需>=1.3.0 解决方法:升级tensorflow

  10. 实验02——java两个数交换的三种解决方案

    package cn.tedu.demo;/** * @author 赵瑞鑫      E-mail:1922250303@qq.com * @version 1.0* @创建时间:2020年7月16 ...