ホームページ >データベース >mysql チュートリアル >一意の ID のないテーブル内の重複行を削除するにはどうすればよいですか?

一意の ID のないテーブル内の重複行を削除するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-23 01:47:09323ブラウズ

How to Delete Duplicate Rows in a Table Without a Unique ID?

一意の ID のない重複行を削除します

テーブル内に一意の行識別子がない場合、重複する行を削除するにはどうすればよいですか?次のデータを含むテーブルがあるとします:

<code>| col1 | col2 | col3 | col4 | col5 | col6 | col7 |
|---|---|---|---|---|---|---|
| john | 1 | 1 | 1 | 1 | 1 | 1 |
| john | 1 | 1 | 1 | 1 | 1 | 1 |
| sally | 2 | 2 | 2 | 2 | 2 | 2 |
| sally | 2 | 2 | 2 | 2 | 2 | 2 |</code>

私たちの目標は、重複する行を削除し、次のものを残すことです:

<code>| col1 | col2 | col3 | col4 | col5 | col6 | col7 |
|---|---|---|---|---|---|---|
| john | 1 | 1 | 1 | 1 | 1 | 1 |
| sally | 2 | 2 | 2 | 2 | 2 | 2 |</code>

一意の ID の欠落の問題を回避する確実な方法は、共通テーブル式 (CTE) と ROW_NUMBER() 関数を使用することです。この組み合わせにより、どの行を削除する必要があるかを特定できます:

<code class="language-sql">WITH CTE AS (
   SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7],
       RN = ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1)
   FROM dbo.Table1
)
DELETE FROM CTE WHERE RN > 1</code>

このクエリを分析してみましょう:

  • 「CTE」という名前の CTE は、ROW_NUMBER() 関数を使用して、「col1」列の個別の値に基づいて行番号を計算し、その列でパーティション化します。
  • 次に、
  • DELETE ステートメントは、行番号 (RN) が 1 より大きい行を削除し、重複する行をすべて削除します。

注: 元の投稿で提供した結果は、タイプミスの可能性があるため異なる場合があります。上記の出力は予想される結果を表しています。

この手法の柔軟性により、PARTITION BY 句に複数の列を含めることができ、基準の複数の組み合わせに基づいて重複を検出できます。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。