ホームページ >データベース >mysql チュートリアル >一意の 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>
このクエリを分析してみましょう:
注: 元の投稿で提供した結果は、タイプミスの可能性があるため異なる場合があります。上記の出力は予想される結果を表しています。
この手法の柔軟性により、PARTITION BY 句に複数の列を含めることができ、基準の複数の組み合わせに基づいて重複を検出できます。
以上が一意の ID のないテーブル内の重複行を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。