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

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

Barbara Streisand
リリース: 2025-01-12 11:27:41
オリジナル
536 人が閲覧しました

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

Netezza で一意の識別子のない重複行を効率的に削除します

重複行を含む大きなテーブルを扱う場合、重複行を削除する最も効率的な方法を見つけるのは困難な場合があります。このクエリは SQL では機能することが証明されていますが、Netezza ではどうなのでしょうか?

生の 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;
ログイン後にコピー

Netezza ソリューション

WITH 句の後の DELETE ステートメントは Netezza と互換性がありません。 USING キーワードを使用した次の解決策を検討してください:

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;
ログイン後にコピー

結果をプレビュー

レコードを削除する前に確認するには、次のように DELETE を SELECT * に置き換え、USING をカンマに置き換えます。

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;
ログイン後にコピー

パフォーマンスノート

重複がほとんどないと予想される場合、このソリューションは、サブクエリに大量の行を生成する NOT IN (...) 句を使用したソリューションよりもパフォーマンスが高くなります。さらに、キー列に NULL 値が含まれている場合は、COALESCE() を使用して比較を処理します。例:

AND COALESCE(T1.col_with_nulls, '[NULL]') = COALESCE(T2.col_with_nulls, '[NULL]')
ログイン後にコピー

以上がNetezza で一意の識別子を使用せずに重複行を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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