SQL删除指定条件的重复数据,只保留一条
DECLARE @Count INT = 1
WHILE @Count > 0
BEGIN
DELETE TB FROM TableName TB
WHERE TB.ID IN (SELECT MIN(ID) FROM TableName TB2
GROUP BY TB2.Column1,TB2.Column2,...TB2.ColumnN
HAVING COUNT(1) > 1);
SET @Count = @@ROWCOUNT;
END
这里使用了循环删除,并不是最优的方法,欢迎园友不吝批评指正。
其实还有一种方法是先查询重复的数据,然后在重复数据中保留一条。 下面用例子说明。
例如表City有如下的数据:

查询出重复的数据,Id只保留其中一个
SELECT MIN(Id) Id,Name FROM dbo.City
GROUP BY Name
HAVING COUNT(1) > 1
然后使用删除时Join上面的表
DELETE C FROM City C
JOIN (
SELECT MIN(Id) Id,Name FROM dbo.City
GROUP BY Name
HAVING COUNT(1) > 1
) TMP ON C.Name = TMP.Name AND C.Id <> TMP.Id
另外一种方法是园友Adeal2008指出的使用row_number()来处理,感谢Adeal2008提供思路,这也是一种方法。
SQL删除指定条件的重复数据,只保留一条的更多相关文章
- mysql删除重复数据只保留一条
mysql删除重复数据只保留一条 新建一张测试表: CREATE TABLE `book` ( `id` char(32) NOT NULL DEFAULT '', `name` varchar(10 ...
- oracle删除重复数据只保留一条
-- 如表role_user的数据 ROLEID USERID -- 删除相同记录只剩下一条记录 根据两个字段查询重复数据 (roleid,userid) ) 删除重复数据只保留一条 delete f ...
- SQL删除重复数据只保留一条
用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select ...
- Oralce中SQL删除重复数据只保留一条(转)
用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 .查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select ...
- SQL查找 删除重复数据只保留一条
--用SQL语句,删除掉重复项只保留一条 --在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 --1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 ...
- sql语句(删除重复数据只保留一条)
用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select ...
- mysql 删除重复数据只保留一条记录
删除重复数据保留name中id最小的记录 delete from order_info where id not in (select id from (select min(id) as id fr ...
- sql 重复数据只保留一条
用SQL语句,删除掉重复项只保留一条在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * ...
- MySQL中删除重复数据只保留一条
用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 SELECT ...
随机推荐
- JavaScript事件模型
1.什么是事件? 事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间.可以使用侦听器(或处理程序)来预订事件,以便事件发生时执行相应的代码.这种在传统软件工程中被称为观察员模式的模型,支持页面的行为 ...
- openerp7 时区问题解决--改成本地时区
由于目前openerp的时区,读取的是UTC时间,而我国本地时间比UTC快8小时 问题就导致,写入数据库的时候时间相差8小时,以及Openerp日志输出时间格式也相差8小时和前端显示问题 1.更改op ...
- Spring学习之路-从放弃到入门
AOP:方法拦截器 IOC:类管理容器 主要讲讲这一天看Spring视频学到的东西,以下的叫法全是自创的. 1.类实例管理容器 关于Spring,首先是对类的管理,在常规情况,生成一个类需要调用new ...
- [转]sp_OACreate WriteLine Writing nvarchar 中文汉字 非乱码to a text file
本文转自:https://stackoverflow.com/questions/48135889/writing-nvarchar-to-a-text-file According to the S ...
- 【Linux】 源码安装make命令详解,避免踩坑
正常的编译安装/卸载: 源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install). configure文件是一个可执行的脚本文件,它有很多选项, ...
- Java面向对象-------多态总结
1.多态:是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 多态性是对象多种表现形式的体现. 2.多态作用: 1. 消除类型之间的耦合关系 ...
- 火星A+B(hdu1230)进制转化
火星A+B Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...
- Java - "JUC" CyclicBarrier源码分析
Java多线程系列--“JUC锁”10之 CyclicBarrier原理和示例 CyclicBarrier简介 CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 ...
- 解决:oracle+myBatis ResultMap 类型为 map 时,表字段类型有 Long/Blob/Clob 时报错
前言:最近在做一个通用查询单表的组件,所以 sql 的写法就是 select *,然后 resultType="map" .如果数据库中的表里有字段类型为 Long 等类型时,my ...
- HDU4662(SummerTrainingDay03-B)
MU Puzzle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...