SQL Server 删除重复记录,只保留一条记录

转载 2016年08月31日 15:29:28

有张表格之前没有设计关键字段的唯一约束,导致有时候执行插入操作时不小心执行了多次就出现了重复记录,后面重新加入唯一约束,由于已经有了重复记录,无法添加,需要先删除重复记录。

        看了网上的一些删除重复记录的方法(好像都是转载于同一篇文章,至少看了十几篇都是同样的内容),其中一个链接:http://blog.csdn.net/anya/article/details/6407280

        自己现在是需要建立多字段唯一约束(非主键),用文中的方法是不行的,反正在SQL Server 2012中是无法通过的。改写了下,如下:

1、查询重复记录:

[sql] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. SELECT * FROM dbo.Table T  
  2. WHERE EXISTS (SELECT 字段1, 字段2, 字段3 FROM dbo.TableSign WHERE 字段1= T.字段1 AND 字段2= T.字段2  
  3. AND 字段3 = T.字段3 GROUP BY 字段1, 字段2, 字段3 HAVING COUNT(*) > 1)  
  4. AND T.SelfID NOT IN (SELECT MIN(SelfID) FROM dbo.Table GROUP BY 字段1, 字段2, 字段3 HAVING COUNT(*) > 1)  
  5.   
  6. 其中:字段1, 字段2, 字段3指需要建立唯一约束的三个字段,SelfID指表Table中的一个自增字段。  


2、删除重复记录,只保留SelfID最小的记录,也就是第一次插入的记录:

[sql] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. DELETE FROM dbo.TableSign  
  2. WHERE SelfID IN  
  3.   
  4. (SELECT SelfID FROM dbo.Table T  
  5.   
  6. WHERE EXISTS (SELECT 字段1, 字段2, 字段3 FROM dbo.TableSign WHERE 字段1= T.字段1 AND 字段2= T.字段2  
  7. AND 字段3 = T.字段3 GROUP BY 字段1, 字段2, 字段3 HAVING COUNT(*) > 1)  
  8. AND T.SelfID NOT IN (SELECT MIN(SelfID) FROM dbo.Table GROUP BY 字段1, 字段2, 字段3 HAVING COUNT(*) > 1))  

如何删除表中的重复记录只保留其中一条

在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢?谢谢! 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select   *   from...
  • zhangbingtao2011
  • zhangbingtao2011
  • 2016年09月20日 16:08
  • 389

SQL Server 删除重复记录,只保留一条记录

有张表格之前没有设计关键字段的唯一约束,导致有时候执行插入操作时不小心执行了多次就出现了重复记录,后面重新加入唯一约束,由于已经有了重复记录,无法添加,需要先删除重复记录。         看了网上的...
  • eriato
  • eriato
  • 2013年12月19日 16:08
  • 16651

关于mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句理解

正好想写一条删除重复语句并保留一条数据的SQL,网上查了一部分资料写的很详细,但还是在这里写下自己的理解,以遍后续学习 。如下: 表字段和数据:  SQL语句:  DELETE ...
  • dsiori
  • dsiori
  • 2016年10月13日 14:30
  • 1096

mysql删除重复记录,保存Id最小的一条

方法1: 1、创建一个临时表,选取需要的数据。 2、清空原表。 3、临时表数据导入到原表。 4、删除临时表。 mysql> select * from student; +----+------+ |...
  • z69183787
  • z69183787
  • 2016年12月02日 18:59
  • 537

MySQL中删除重复数据只保留一条

用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢  1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 ...
  • z_youarethebest
  • z_youarethebest
  • 2016年12月21日 15:22
  • 422

MySQL中删除重复数据只保留一条

用SQL语句,删除掉重复项只保留一条在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 SELECT...
  • u014723529
  • u014723529
  • 2016年04月22日 11:27
  • 43674

SQL去除重复记录

有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。 1、对于第一种重复,比较容易解决,...
  • yang_best
  • yang_best
  • 2015年02月27日 09:27
  • 2142

高效删除Oracle数据库中重复数据,并保留最新一条的方法

在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来很多的不便,那么怎么删除这些重复没有用的数据呢?   重复数据删除技术可以提供更大的备份容量,实现...
  • Flood_Dragon
  • Flood_Dragon
  • 2013年06月06日 12:56
  • 1396

Oracle删除重复记录只保留一条数据的几种方法

Oracle删除重复记录只保留一条数据的几种方法 1. 问题描述 BBSCOMMENT表为BBSDETAIL的从表,记录商户评价信息。因为数据倒腾来倒腾去的,有很多重复数据。表结构如下: C...
  • haiross
  • haiross
  • 2014年08月12日 11:53
  • 21879

SQL语句 删除表user 中字段name 内容重复的记录,A表 ,B表 字段相同 有关联关系的表 对表两个表中的数据

今天去面试!我给大意了,直接写了个删除语句!又中招了。。。 在网上找了半天也没找到合适的代码! 回来想了想才知道自已太大意了!想了良久,想出了这么个办法, 今天去面试!我给大意了,直接写了个...
  • liangrui1988
  • liangrui1988
  • 2013年07月11日 01:51
  • 3448
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server 删除重复记录,只保留一条记录
举报原因:
原因补充:

(最多只允许输入30个字)