当前位置: 首页 > news >正文

MySQL-去重留一

问题:

  去除MySQL中重复的记录,仅保留其中一条。本例中cname为重复项,而cid为primary key。

尝试解决:

  使用代码:

DELETE FROM t_customer
WHERE cname in
    (
    SELECT cname FROM t_customer GROUP BY cname HAVING count(cname)>1
    )
AND cid NOT IN
    (
    SELECT min(cid) cid FROM t_customer GROUP BY cname HAVING count(cname)>1
    )

  代码思路:

    设置2个条件,1是查出cname相同的记录里的cname值,2是查出cname相同的记录里cid最小的一项记录的cid值,然后据此进行删除cname重复的记录,保留其中cid最小的记录。

  运行以后发现:

    报错:[HY000][1093] You can't specify target table 't_customer' for update in FROM clause
    报错原因:(找了几篇博客看来的)大意是:不能在同一条语句中对某个字段进行判断的同时,又对其进行update操作。有博主还提到“这个问题只出现于MySQL,MSSQL和Oracle不会出现此问题”(未验证过,在此只是提一句)

最后解决:

  1种代码:

DELETE FROM t_customer
WHERE cname in
    (
    SELECT cname FROM
                      (
                      SELECT cname FROM t_customer GROUP BY cname HAVING count(cname)>1
                      ) t1
    )
AND cid NOT IN
    (
    SELECT cid FROM
                    (
                    SELECT min(cid) cid FROM t_customer GROUP BY cname HAVING count(cname)>1
                    ) t2
    )

   思路:

    将之前的2个查询结果先暂存为t1和t2,然后从这2个临时集合中查询出cname和cid作为删除条件

  第2中代码:

    看其他的博客看到的:

DELETE t_customer
FROM
     t_customer,
     (
     SELECT min(cid) cid, cname
     FROM t_customer
     GROUP BY cname
     HAVING count(cname)>1
     )t
WHERE t_customer.cname=t.cname
AND t_customer.cid>t.cid;

     运行以后也得到了想要的结果。

    

转载于:https://www.cnblogs.com/wonewo/p/9935882.html

相关文章:

  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • Presentational and Container Components
  • 使用Python一年多了,总结八个好用的Python爬虫技巧
  • IO的模式
  • [cogs2652]秘术「天文密葬法」
  • 【AliOS Things学习笔记】在Developerkit开发板上运行blink例程
  • 黑盒测试的测试方法
  • 开发阶段
  • angular2+ 生命周期
  • 可见面判别算法---光线投射算法
  • [每日短篇] 10 - Docker 清理无用的镜像
  • 书摘—极致产品
  • 0013-如何在Kerberos与非Kerberos的CDH集群BDR不可用时复制数据
  • MySQL数据类型详解
  • React和Redux的连接react-redux
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • Android框架之Volley
  • Java小白进阶笔记(3)-初级面向对象
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 力扣(LeetCode)22
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 我的zsh配置, 2019最新方案
  • 硬币翻转问题,区间操作
  • 与 ConTeXt MkIV 官方文档的接驳
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​用户画像从0到100的构建思路
  • #git 撤消对文件的更改
  • #Z0458. 树的中心2
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (6)设计一个TimeMap
  • (zhuan) 一些RL的文献(及笔记)
  • (规划)24届春招和25届暑假实习路线准备规划
  • (转)创业的注意事项
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .net 4.0发布后不能正常显示图片问题
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net framework4与其client profile版本的区别
  • .net MySql
  • .net知识和学习方法系列(二十一)CLR-枚举
  • @selector(..)警告提示
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [AIGC] MySQL存储引擎详解
  • [Bugku]密码???[writeup]
  • [C/C++]数据结构 栈和队列()
  • [IE编程] WebBrowser控件的多页面浏览(Tabbed Browsing)开发接口
  • [nlp] tokenizer
  • [NOSQL] Redis介绍
  • [poj] 3974 Palindrome
  • [Python] 输入与输出
  • [QT] TCP协议演示
  • [React]全自动数据表格组件——BodeGrid
  • [spark] DataFrame 的 checkpoint
  • [SUCTF 2019]CheckIn1
  • [SystemC]Primitive Channels and the Kernel