ホームページ > データベース > mysql チュートリアル > 一意のキーを持たずに SQL Server で重複する行を削除するにはどうすればよいですか?

一意のキーを持たずに SQL Server で重複する行を削除するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-23 01:51:09
オリジナル
906 人が閲覧しました

How to Delete Duplicate Rows in SQL Server Without a Unique Key?

SQL Server での重複行の効率的な削除: CTE アプローチ

一意のキーが欠落している SQL Server テーブルを扱う場合、重複行を削除するには戦略的なアプローチが必要です。 これは、共通テーブル式 (CTE) を ROW_NUMBER() 関数と組み合わせて使用​​すると効果的に実現できます。

このテクニックを実証するソリューションは次のとおりです:

<code class="language-sql">WITH RowNumberedRows AS (
   SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7],
       RN = ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1)
   FROM dbo.Table1
)
DELETE FROM RowNumberedRows
WHERE RN > 1;</code>
ログイン後にコピー

詳細な説明:

RowNumberedRows という名前の CTE は、テーブル内の各行に一意の行番号 (RN) を割り当てます。 ROW_NUMBER() 関数は、col1 列に基づいて行を分割し、各パーティション内に連続番号を割り当てます。 これにより、各重複グループの最初の出現が 1 の RN を受け取るようになります。

次に、DELETE ステートメントは CTE をターゲットにし、RN が 1 より大きい行をすべて削除します。これにより、各重複セットの最初の行のみが残り、効果的に重複が削除されます。

例:

このクエリをサンプル データに適用すると、次の結果が得られます:

COL1 COL2 COL3 COL4 COL5 COL6 COL7
john 1 1 1 1 1 1
sally 2 2 2 2 2 2

重複した「john」行が正常に削除されたことを確認します。

この方法の適応性は注目に値します。 ROW_NUMBER() 関数 (PARTITION BY col1, col2 など) 内のパーティション分割列を調整することで、必要に応じて複数の列に基づいて一意性を定義できます。

以上が一意のキーを持たずに SQL Server で重複する行を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート