专栏首页追逐时光MySQL 查询重复数据,删除重复数据保留id最小的一条作为唯一数据

MySQL 查询重复数据,删除重复数据保留id最小的一条作为唯一数据

开发背景:

  最近在做一个批量数据导入到MySQL数据库的功能,从批量导入就可以知道,这样的数据在插入数据库之前是不会进行重复判断的,因此只有在全部数据导入进去以后在执行一条语句进行删除,保证数据唯一性。

实战:

表结构如下图所示:

表明:brand

操作:

使用SQL语句查询重复的数据有哪些:

SELECT * from brand WHERE brandName IN(
select brandName from brand GROUP BY brandName HAVING COUNT(brandName)>1 #条件是数量大于1的重复数据
)

使用SQL删除多余的重复数据,并保留Id最小的一条唯一数据:

注意点:

错误SQL:DELETE FROM brand WHERE brandName IN (select brandName from brand GROUP BY brandName HAVING COUNT(brandName)>1) 
AND Id NOT IN (select MIN(Id) from brand GROUP BY brandName HAVING COUNT(brandName)>1)

提示: You can't specify target table 'brand' for update in FROM clause 不能为FROM子句中的更新指定目标表“brand”

原因是:不能将直接查处来的数据当做删除数据的条件,我们应该先把查出来的数据新建一个临时表,然后再把临时表作为条件进行删除功能

正确SQL写法:

 DELETE FROM brand WHERE brandName IN (SELECT brandName FROM (SELECT brandName FROM brand GROUP BY brandName HAVING COUNT(brandName)>1) e)
 AND Id NOT IN (SELECT Id FROM (SELECT MIN(Id) AS Id FROM brand GROUP BY brandName HAVING COUNT(brandName)>1) t)

#查询显示重复的数据都是显示最前面的几条,因此不需要查询是否最小值

更加简单快捷的方式:

这是老飞飞的前辈给了一个更加方便,简洁的写法(非常感谢大佬的方法):

DELETE FROM brand WHERE Id NOT IN (SELECT Id FROM (SELECT MIN(Id) AS Id FROM brand GROUP BY brandName) t)

这句的意思其实就是,通过分组统计出数据库中不重复的最小数据id编号,让后通过 not in 去删除其他重复多余的数据。

结果如下图:

总结:

很多东西都是需要自己一步一步的去探究的,当然网上的建议也是非常宝贵的借鉴和资源,无论做什么开发我们都需要理解它的工作原理才能够更好的掌握它。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 微信公众号支付提示当前页面的URL未注册

      记一下前端时间自己做了一个微信公众号支付的功能,因为有一段时间没有接触过了微信支付方面的开发,居然忘记了在微信商户商户号中配置了对应的支付目录,所以提示我当...

    追逐时光
  • .Net轻松实现支付宝服务窗网页授权并获取用户相关信息

     最近在开发一个商业街区的聚合扫码支付功能,其中需要用到的有支付宝,微信两种支付方式,当然对于开发微信支付而已作为自己的老本行已经比较熟悉了,然而对于我来说支...

    追逐时光
  • .NET Core使用NPOI导出复杂Word详解

      最近使用NPOI做了个导出Word文档的功能,关于使用.NET Core 导出Word文档的方式有很多。最终我为什么选择了NPOI来实现了这个功能,首先是N...

    追逐时光
  • 固定宽高比例盒模型实现方案

    常规布局中,我们经常会遇到百分比布局的方式,也经常会遇到宽度与高度都设置百分比的情况,但高度值我们一般很少用百分比。尤其在百分比布局中,可能很多布局你是宽度百分...

    RobinsonZhang
  • 微信小程序搜索框代码组件

    达达前端
  • 论游戏创新:好莱坞模式

    技术改变思想 本文为系列文章《论游戏创新》的第三部分,共有5部分,敬请关注。 上一篇为《论游戏创新:新渠道为王》 生产机制 很多时候,游戏的生产和电影的生产非常...

    韩伟
  • Linux命令行:查看服务器开放的端口号

    在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型。物理端口指的是物理存在的端口,如ADSL Modem、集线器、交换机、路由器上用 于连接其他网络设...

    用户5640963
  • 使用Electron创建跨平台桌面应用

    开发和维护一个桌面应用是比较复杂的,所以可以理解现在的公司门为何推动WEB应用或者各种跨平台版本,在过去的十几年里,已经有了很多尝试,Flash、Air、Jav...

    疯狂的技术宅
  • 五一出行,导航软件是怎么提前预测道路状况的?

    受北京等地调低公共卫生应急响应级别影响,各地“五一”出行需求应声上涨,迎来出行高峰。

    APICloud
  • SAP Cloud for Customer Service Control工作中心介绍

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券