小编典典

如何删除重复的行?

all

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

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

我的表

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

阅读 110

收藏
2022-02-25

共1个答案

小编典典

假设没有空值,您GROUP BY将使用唯一列,并将SELECTRowIdMIN (or MAX)作为要保留的行。然后,只需删除没有行 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)))
2022-02-25