PostgreSQL: 複数の行更新の効率化
PostgreSQL は、複数の行を同時に更新するための効率的な方法を提供します。これは、大量のデータセットや複雑な更新条件を扱う場合に大きな利点となります。 従来の SQL の行ごとの個別の UPDATE
ステートメントとは異なり、PostgreSQL には 2 つの優れた代替手段が用意されています。
アプローチ 1: CASE を使用した条件付き更新
CASE
式を使用すると、特定の基準に基づいて行に異なる値を割り当てることができます。 UPDATE
ステートメントの構造は次のとおりです:
<code class="language-sql">UPDATE table_name SET column_name = CASE WHEN condition1 THEN value1 WHEN condition2 THEN value2 ... ELSE default_value END WHERE condition;</code>
たとえば、column_a
を 1 (column_b
が '123') に設定し、column_b
が '345' である 2 に設定するには:
<code class="language-sql">UPDATE table_name SET column_a = CASE WHEN column_b = '123' THEN 1 WHEN column_b = '345' THEN 2 ELSE column_a -- Retain original value if condition not met END WHERE column_b IN ('123', '345');</code>
アプローチ 2: 簡潔な更新のための UPDATE...FROM
UPDATE...FROM
コンストラクトは、別のテーブルまたはサブクエリを使用して更新値を定義するため、コードがよりクリーンで読みやすくなります。構文は次のとおりです:
<code class="language-sql">UPDATE table_name SET column_names = (SELECT column_names FROM subquery) WHERE condition;</code>
これを前の例に適用すると:
<code class="language-sql">UPDATE table_name AS t SET column_a = c.column_a FROM ( VALUES ('123', 1), ('345', 2) ) AS c(column_b, column_a) WHERE c.column_b = t.column_b;</code>
これらの PostgreSQL テクニックは、特に大規模なデータ操作の場合、個々の UPDATE
ステートメントと比較して効率とコードの明瞭さを大幅に向上させます。
以上が単一の PostgreSQL クエリで複数の行を効率的に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。