码迷,mamicode.com
首页 > 数据库 > 详细

【Stackoverflow问题精选】SQL中去除重复行

时间:2014-11-27 22:04:36      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:sql   stackoverflow   去重   

问题
假设有一个数据量比较大的表(例如300,000+行),其中有重复的行(除了主键外,其他的列数据是一样的),如何快速去重呢?
我的表类似这样
MyTable
-----------
RowID int not null identity(1,1) primary key,
Col1 varchar(20) not null,
Col2 varchar(2048) not null,
Col3 tinyint not null


精华回答
假设没有null值,你可以先对其他列做group by,然后只保留MIN或者MAX(RowId),删除其他行:
DELETE MyTable 
FROM MyTable
LEFT OUTER JOIN (
   SELECT MIN(RowId) as RowId, Col1, Col2, Col3 
   FROM MyTable 
   GROUP BY Col1, Col2, Col3
) as KeepRows ON
   MyTable.RowId = KeepRows.RowId
WHERE
   KeepRows.RowId IS NULL
如果RowId不是int类型,而是个GUID,则可以用
CONVERT(uniqueidentifier, MIN(CONVERT(char(36), MyGuidColumn))) 


stackoverflow链接:
http://stackoverflow.com/questions/18932/how-can-i-remove-duplicate-rows

【Stackoverflow问题精选】SQL中去除重复行

标签:sql   stackoverflow   去重   

原文地址:http://blog.csdn.net/lizeyang/article/details/41555105

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!