ホームページ >データベース >mysql チュートリアル >Netezza で一意の識別子を使用せずに重複行を効率的に削除するにはどうすればよいですか?
Netezza で一意の識別子のない重複行を効率的に削除します
重複行を含む大きなテーブルを扱う場合、重複行を削除する最も効率的な方法を見つけるのは困難な場合があります。このクエリは SQL では機能することが証明されていますが、Netezza ではどうなのでしょうか?
生の SQL クエリ
<code class="language-sql">WITH TempEmp AS ( SELECT name, ROW_NUMBER() OVER(PARTITION by name, address, zipcode ORDER BY name) AS duplicateRecCount FROM mytable ) DELETE FROM TempEmp WHERE duplicateRecCount > 1;</code>
Netezza ソリューション
WITH 句の後の DELETE ステートメントは Netezza と互換性がありません。 USING キーワードを使用した次の解決策を検討してください:
<code class="language-sql">DELETE FROM table_with_dups T1 USING table_with_dups T2 WHERE T1.ctid < T2.ctid AND T1.name = T2.name AND T1.address = T2.address AND T1.zipcode = T2.zipcode;</code>
結果をプレビュー
レコードを削除する前に確認するには、次のように DELETE を SELECT * に置き換え、USING をカンマに置き換えます。
<code class="language-sql">SELECT * FROM table_with_dups T1, table_with_dups T2 WHERE T1.ctid < T2.ctid AND T1.name = T2.name AND T1.address = T2.address AND T1.zipcode = T2.zipcode;</code>
パフォーマンスノート
重複がほとんどないと予想される場合、このソリューションは、サブクエリに大量の行を生成する NOT IN (...) 句を使用したソリューションよりもパフォーマンスが高くなります。さらに、キー列に NULL 値が含まれている場合は、COALESCE() を使用して比較を処理します。例:
<code class="language-sql">AND COALESCE(T1.col_with_nulls, '[NULL]') = COALESCE(T2.col_with_nulls, '[NULL]')</code>
以上がNetezza で一意の識別子を使用せずに重複行を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。