首页 > 代码库 > 【Stackoverflow问题精选】SQL中去除重复行
【Stackoverflow问题精选】SQL中去除重复行
问题
假设有一个数据量比较大的表(例如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中去除重复行
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。