重複する行を削除するにはどうしたらいいですか?
かなり大きな`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
1250
3
ヌル文字がないと仮定して、ユニークなカラムで
GROUP BY
して、MIN (or MAX)
の RowId を保持する行としてSELECT
します。その後、行IDを持たないものをすべて削除します。整数ではなくGUIDの場合には
を
Microsoftのサポートサイトに、重複の除去に関する良い記事があります。かなり保守的で、すべてを別々の手順で行うようになっていますが、大きなテーブルに対してはうまく機能するはずです。
私は過去に自己結合を使ってこれを行ったことがありますが、おそらくHAVING句を使ってきれいにすることができるでしょう。
ここにも重複の除去に関する良い記事があります。
SQLは関係代数に基づいており、関係代数では重複は発生しません、なぜなら重複はセットでは許されないからです。"
tempテーブルによる解決策と、2つのmysqlの例を紹介しています。
将来的には、データベースレベルで防止するのか、アプリケーションの観点から防止するのか。 なぜなら、データベースは参照整合性の維持に責任を持つべきであり、開発者はただ問題を起こすだけだからです。)