一意の識別子のない重複行を効率的に削除します
データ テーブルに一意の行識別子がない場合、重複の削除が困難になることがあります。この記事では、最初に出現した行を保持しながら重複行を削除するための効率的なソリューションを提供します。
重複行を含むテーブルを見てみましょう:
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 |
重複行を削除した後の望ましい結果は次のとおりです:
col1 | col2 | col3 | col4 | col5 | col6 | col7 |
---|---|---|---|---|---|---|
john | 1 | 1 | 1 | 1 | 1 | 1 |
sally | 2 | 2 | 2 | 2 | 2 | 2 |
CTE と ROW_NUMBER を使用したソリューション
このメソッドは、共通テーブル式 (CTE) と ROW_NUMBER() 関数を利用します。 CTE は、特定の順序に基づいて各行にシーケンス番号 (RN) を割り当て、重複を識別して削除できるようにします。
これは、段階的な手順を含む SQL クエリです:
<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) -- 为 col1 定义的每个组内分配序列号 FROM dbo.Table1 ) DELETE FROM CTE WHERE RN > 1; -- 删除 RN 大于 1 的行(表示重复项)</code>
手順:
出力:
クエリを実行すると、更新されたテーブルには次の内容が含まれます:
col1 | col2 | col3 | col4 | col5 | col6 | col7 |
---|---|---|---|---|---|---|
john | 1 | 1 | 1 | 1 | 1 | 1 |
sally | 2 | 2 | 2 | 2 | 2 | 2 |
以上が一意の識別子を持たないテーブルから重複行を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。