問題

かなり大きなSQL Serverテーブル(つまり300,000以上の行)から重複する行を削除する最良の方法は何ですか?

もちろん、RowID IDフィールドが存在するため、行は完全に重複しません。

マイテーブル

 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は一意の列、SELECTMIN (or MAX) 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)))
 

  同じタグがついた質問を見る

sql-servertsqlduplicates