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

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

Barbara Streisand
リリース: 2025-01-23 01:47:09
オリジナル
369 人が閲覧しました

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 サイトの他の関連記事を参照してください。

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