欢迎投稿

今日深度:

【Stackoverflow好问题】SQL中去除重复行,stackover

【Stackoverflow好问题】SQL中去除重复行,stackoverflowsql


问题 假设有一个数据量比较大的表(例如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,总能在上面找到疑难杂症的解决办法。偶然发现该网站有一个热度榜单。于是精选了热度较高的一些问题,然后按照自己的理解,把大家的讨论梳理出来。因此,这些文章不是真正的翻译,而是按照自己的理解做了一些增删、润色,希望能把上面的讨论,更精简有效地分享给大家。 如需转载,请注明原文地址 http://blog.csdn.net/lizeyang

www.htsjk.Com true http://www.htsjk.com/shujukunews/4856.html NewsArticle 【Stackoverflow好问题】SQL中去除重复行,stackoverflowsql 问题 假设有一个数据量比较大的表(例如300,000行),其中有重复的行(除了主键外,其他的列数据是一样的),如何快速去重呢?...
评论暂时关闭