首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

透过SQL保留数据库表中的唯一一行重复数据

2013-12-13 
通过SQL保留数据库表中的唯一一行重复数据在项目开发和维护过程中,经常会遇到数据库中存在重复数据,由此带

通过SQL保留数据库表中的唯一一行重复数据

在项目开发和维护过程中,经常会遇到数据库中存在重复数据,由此带来一系列的问题。于是“如何删除重复数据,并保留重复数据的一条记录”这样的需求就会经常在工作中遇到。而每次遇到这样的问题总是要重新整理sql,今天再次遇到这样的问题,决定还是记录下来,方便以后查阅。

?

目前工作的数据库是SQL Server 2008, 所以该方案只针对SQL Server有效。

大致思路: 通过Rank函数对可能存在重复值的columns进行分块Ranking (如下表)。随后对rank值大于1的记录进行删除。

ProductID   Name                   LocationID   Quantity Rank----------- ---------------------- ------------ -------- ----494         Paint - Silver         3            49       1495         Paint - Blue           3            49       1493         Paint - Red            3            41       3496         Paint - Yellow         3            30       4492         Paint - Black          3            17       5495         Paint - Blue           4            35       1496         Paint - Yellow         4            25       2493         Paint - Red            4            24       3492         Paint - Black          4            14       4494         Paint - Silver         4            12       5

大致的SQL 如下:

?

alter table tableName add  sno int identity(1,1)delete from tableName where sno in(select sno from (select *,RANK() OVER ( PARTITION BY empid,name ORDER BY sno DESC )rankFrom tableName)Twhere rank>1)ALTER TABLE tableName DROP COLUMN sno

?当然还有其他方法,诸如通过临时表之类的,下次用到再补充。

热点排行