ホームページ >データベース >mysql チュートリアル >Netezza で一意の識別子を使用せずに重複行を効率的に削除するにはどうすればよいですか?

Netezza で一意の識別子を使用せずに重複行を効率的に削除するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-12 11:27:41516ブラウズ

How to Efficiently Delete Duplicate Rows in Netezza Without a Unique Identifier?

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

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