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 Server 批量删除重复记录(批量、快速、安全)

利用分组排序,实现快速、安全、批量的删除重复记录
  • lqh4188
  • lqh4188
  • 2017年02月06日 15:19
  • 276

在SQL Server中快速删除重复记录

在SQL Server中除了对拥有十几条记录的表进行人工删除外,实现删除重复记录一般都是写一段代码,用游标的方法一行一行检查,删除重复的记录。因为这种方法需要对整个表进行遍历,所以对于表中的记录数不是...
  • zsgit
  • zsgit
  • 2011年03月28日 17:03
  • 220

轻松消除SQL SERVER重复记录

  • 2009年03月03日 13:21
  • 99KB
  • 下载

Sql server 删除重复记录的SQL语句

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

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

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

oracel重复记录只保留一条

  • 2014年04月01日 14:18
  • 795B
  • 下载

sql server 查询去掉重复记录

数据表结构if exists(select * from sysobjects where name='stuInfo') drop table stuInfo create table stuInf...

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

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

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

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

【MySQL】删除重复记录保留一条的高性能DELETE写法

周中遇到一个情况就是一张表出现了很多重复记录,需要删除掉这些重复记录只保留一条,因为有自增长的主键,就决定保留PK最小的那一条吧。具体操作过程记录如下。      建一张示例表并插些数据看看吧。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server 删除重复记录,只保留一条记录
举报原因:
原因补充:

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