ホームページ > データベース > mysql チュートリアル > 一意制約を使用して PostgreSQL テーブルから重複行を効率的に削除するにはどうすればよいですか?

一意制約を使用して PostgreSQL テーブルから重複行を効率的に削除するにはどうすればよいですか?

DDD
リリース: 2025-01-14 10:14:14
オリジナル
400 人が閲覧しました

How Can I Efficiently Remove Duplicate Rows from a PostgreSQL Table with a Unique Constraint?

PostgreSQL: 固有の制約を持つ重複行を効率的に削除する

PostgreSQL テーブル内の重複行は、クエリのパフォーマンスとデータの精度に影響を与える可能性があります。 すでに重複を含むテーブルに一意制約を追加することは、重複を手動で削除すると非常に時間がかかる可能性があるため、課題が生じます。

従来の削除方法: 非効率的

従来のアプローチでは、重複を特定して削除するために反復的な SQL ステートメントを使用することが多く、特に大規模なデータセットの場合、非常に非効率的です。

USING 句を使用した最適化された削除

PostgreSQL は、DELETE ステートメントと USING 句を使用するという優れたソリューションを提供します。 これにより、定義された基準に基づいて重複行を 1 つだけ対象的に削除できるようになります。

例: 最小 ID に基づいて重複を削除

重複した「John Doe」エントリを持つ「users」テーブルがあるとします。低いユーザー ID の重複を削除するには:

<code class="language-sql">DELETE FROM users USING users AS u2
WHERE users.username = u2.username AND users.id < u2.id;</code>
ログイン後にコピー

USING 句を利用して、テーブルをエイリアス (u2) と比較し、ID が小さい行を特定して削除します。これは従来の方法を大幅に上回ります。

より複雑なシナリオの処理

この手法は、より複雑なシナリオに適応します。 たとえば、最新の日付の行 (created_at) を保持するには:

<code class="language-sql">DELETE FROM users USING users AS u2
WHERE users.username = u2.username AND users.created_at < u2.created_at;</code>
ログイン後にコピー

このアプローチにより、データの整合性を維持しながら、数百万行のテーブルであっても効率的に重複を削除できます。 USING 句は PostgreSQL 固有の機能であり、標準 SQL の一部ではないことに注意してください。

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

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