1. ホーム
  2. sql-server

[解決済み] 重複した行を削除するにはどうすればよいですか?

2022-03-16 20:29:52

質問

かなり大規模なデータから重複する行を削除する最善の方法は何ですか? 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

解決方法は?

ヌルがないと仮定すると 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)))