小编典典

如何删除重复的行?

sql

从相当大的SQL Server表(即300,000+行)中删除重复的行的最佳方法是什么?

由于RowID身份字段的存在,这些行当然不会是完美的重复项。

我的Table

` RowID int not null identity(1,1) primary key, Col1 varchar(20) not null, Col2 varchar(2048) not null, Col3 tinyint not null


阅读 177

收藏
2021-03-23

共1个答案

小编典典

假设没有空,你GROUP BY的唯一列,并SELECTMIN (orMAX)RowId的为行,以保持。然后,只需删除没有行ID的所有内容:

DELETE 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

如果您使用的是GUID而不是整数,则可以替换

MIN(RowId)

CONVERT(uniqueidentifier, MIN(CONVERT(char(36), MyGuidColumn)))
2021-03-23