MySQL: 如何删除某字段值重复的记录并保留其中一条_mysql删除某一字段重复数据保留一条-程序员宅基地

技术标签: MySQL  重复值删除  

1.dept 表:

ID NAME
100 AAA
100 BBB
100 CCC
101 DDD
101 EEE
102 FFF
103 GGG

2.目标描述:
dept表中, ID字段100出现3次, 101出现2次, 其余出现1次, 通过一句MySQL语句将ID字段重复值对应的记录删除, 只保留其中一条, 即: 100对应的记录需要删除2行, 101记录删除1行

3.思路描述
1)定位出ID字段出现重复的值. 本例中的策略是分组group by后使用count函数:
select ID from dept group by ID having count(ID)>1;

2)明确保留策略. 仅仅能定位出重复值不足以达到保留其中一条的目的, 也就是说, 必须明确保留重复值记录中哪一条, 本例中的策略是使用min 或者 max确定唯一一条记录:
select min(NAME) as NAME from dept group by ID having count(ID)>1;

3)结合前两点定位出要删除的目标, 即
select * from dept
where ID in 策略1)定位的记录
and NAME not in 策略2)定位的记录;

具体的SQL语句:
select * from dept

where ID in (select ID from dept group by ID having count(ID)>1)

and NAME not in (select min(NAME) as NAME from dept group by ID having count(ID)>1);

4.根据思路描述, 写出删除语句.
delete from dept

where ID in (select ID from(select ID from dept group by ID having count(ID)>1) as duplicate)

and NAME not in (select NAME from (select min(NAME) as NAME from dept group by ID having count(ID)>1) as retain);

与3中的3)比较会发现删除语句比选择语句多嵌套了一层, 为什么?自力更生, 丰衣足食哈哈哈, 这里不是说想卖关子, 而是希望这篇文章落笔于关注点, 相关问题会提到但在本文不予与解决.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Royalways/article/details/101007263

智能推荐

Android Loader简单使用-程序员宅基地

文章浏览阅读827次。Loader在Android3.0引进,它让异步加载数据变得容易。特征:1.在Activity、Fragment中都可以使用2.Loader可以提供异步加载数据3.监视数据源的变化,当数据源发生变化的时候,会传递新的数据4.当loader重建的时候,会自动链接到最后一个Loader的cursor数据上,而不去进行重新查找。在app中使用Loader的时候,可能使

Spring Aop实例之xml配置_aop xml配置-程序员宅基地

文章浏览阅读4.5w次,点赞29次,收藏57次。上篇博客《3幅图让你了解Spring AOP》中介绍了aop通知类型,AOP的配置方式有2种方式:xml配置和AspectJ注解方式。今天我们就来实践一下xml配置方式。_aop xml配置

玲珑oj 1028 贪心-程序员宅基地

文章浏览阅读95次。http://www.ifrog.cc/acm/problem/1028很有趣的一道题,求从n个数里挑出不同的两个,使得他俩'|','&','^'后的值尽量大,求这个最大的结果。求最大的异或值想到了trie树的一个经典操作,对于按位与,要两个位置都是1才会出现1,我们肯定要贪心操作,优先使高位为1,这也可以在trie上完成,如果这个位置1的个数>=2,至少有两个..._,给定 n,a,所有联通块的点数 都 ≤ a 的有标号森林有多少种,答案对 998244353 取

【C++整理】C++STL容器之vector——向量容器知识点整理_vector 格式化-程序员宅基地

文章浏览阅读219次。C++容器之Vector总结1.什么是Vector向量(Vector) 是一个封装了动态大小数组的 顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组2.Vector的内存机制Vector在内存中的结构和数组一样,就是一段连续的内存空间,不过Vector是动态的数组,当Vector中的数据增加并超过当前最大容量的时候,Vector会在内存中找到另外一段更大容量的内存,将数据拷贝至新的内存空间中,并且_vector 格式化

Linux下常用的文件归档,压缩和解压缩命令-程序员宅基地

文章浏览阅读222次。命令              常见后缀         程序所在目录compress / uncompress     .Z .tar.Z         /usr/binbzip2 /bunzip2         .bz .bz2 .tbz .tbz2 /bingzip /gunzip          .gz .tar.gz ..._解压缩当前目录下的passwd.gz文件,并显示进度

QT线程2_qnetworkreply 用另外线程不能收到finished-程序员宅基地

文章浏览阅读289次。介绍You’re doing it wrong. — Bradley T. Hughes线程是qt channel里最流行的讨论话题之一。许多人加入了讨论并询问如何解决他们在运行跨线程编程时所遇到的问题。快速检阅一下他们的代码,在发现的问题当中,十之八九遇到得最大问题是他们在某个地方使用了线程,而随后又坠入了并行编程的陷阱。Qt中创建、运行线程的“易用”性、缺乏相关编程尤其是异_qnetworkreply 用另外线程不能收到finished

随便推点

Linux top命令详解-程序员宅基地

文章浏览阅读5w次,点赞41次,收藏168次。背景性能测试时,通常用top命令观察cpu、内存使用情况top初体验进入linux系统,输入top命令参数详解第一行:系统运行信息,显示系统运行当前时间是16:51分,系统运行了34days,当前有2个用户登录,系统平均负载压力情况为0.46(1min的平均负载压力)、0.9.0(5min的平均负载压力)、0.9.0(15min的平均负载压力)注:load average:每隔5s检查一次活跃的进程数,然后按特定算法计算出来的。一般当这个数值除以CPU的核数得到的值大于3~5时,就标明系统的负_linux top

神雕2暂无服务器信息,神雕侠侣2手游4月2日停服维护公告_神雕侠侣2手游4月2日更新了什么_玩游戏网...-程序员宅基地

文章浏览阅读145次。在神雕侠侣2手游中4月2日究竟更新了哪些有趣的内容呢?在本次维护更新中相信大家对此也都是相当好奇的呢!不清楚的话下面就来看一下吧~!亲爱的少侠为了给您带来更好的游戏体验,《神雕侠侣2》手游将于04月02日09:00-10:00进行例行停服维护,届时将无法登入游戏。若提前完成维护,我们将提前开服。请各位玩家提前做好准备,以免造成损失。维护结束后将统一奉上补偿,感谢您的支持与理解。清明节活动【活动一】..._神雕侠侣2手游更新版本后找不到服务器了

Qt Widget Gallery-程序员宅基地

文章浏览阅读185次。Qt Widget Gallery Qt Widget GalleryQt Widget GalleryThis is a gallery of the most common Qt widgets. The code used to generate thes..._qt widget gallery 用法

编写递归函数求Fibonacci数列的第n项_编写函数返回fibonacci数列的第n项的值,用递归方法实现。主函数中输入一个整数n(n-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏11次。编写递归函数求Fibonacci数列的第n项_编写函数返回fibonacci数列的第n项的值,用递归方法实现。主函数中输入一个整数n(n

JavaScript 打断点_js 打断点-程序员宅基地

文章浏览阅读3.9k次。程序加断点:1.执行脚本通过浏览器打开,2.按F12按键,弹出调试界面,3.点击Source,4.找到你需要添加断点的页5.点击要添加断点行前面的数字,添加断点成功6.点击右侧向下“箭头+原点”按钮,进行下一步调试..._js 打断点

10 分钟看懂分布式事务-程序员宅基地

文章浏览阅读271次。点击上方 "程序员小乐"关注,星标或置顶一起成长每天凌晨00点00分,第一时间与你相约每日英文Don't cry over the past, it'..._快速理解分布式事务

推荐文章

热门文章

相关标签