データベースを操作する際に、「SELECTした結果をもとにUPDATEする」という操作は、非常に一般的です。例えば、在庫管理システムでは、売上データを元に商品の在庫数を更新したり、分析システムでは、条件に応じて特定のフラグを設定したりすることがあります。
PostgreSQLは、このような要件に応えるための柔軟で強力な機能を提供しています。単純な値の更新だけでなく、複雑な条件を含む更新や、他のテーブルの値を参照した更新も簡単に実現できます。
この記事では、PostgreSQLでSELECTした結果を用いてUPDATEを行う方法を解説します。基本的な構文から実践的な例までをカバーし、わかりやすく解説していきます!
SELECTした結果をUPDATEする
SELECTした結果をUPDATEする方法は2通りあります。どのような方法か見ていきましょう。
サブクエリを使った更新
サブクエリを使用することで、他のテーブルの値を参照して更新が可能です。以下は、従業員テーブルの給与を部署ごとの平均値に更新する例です。
UPDATE employees
SET salary = (SELECT AVG(salary)
FROM department_salaries
WHERE department_id = employees.department_id)
WHERE EXISTS (
SELECT 1
FROM department_salaries
WHERE department_id = employees.department_id
);
ポイント
- サブクエリで取得した値を
SET
句で利用しています。 WHERE EXISTS
を使うことで、対象となる行が存在する場合にのみ更新を実行します。
JOINを使った更新
複数のテーブルを結合して更新を行う場合、FROM
句を使用してJOINを活用できます。以下は、注文テーブルの合計価格を更新する例です。
UPDATE orders
SET total_price = new_data.total
FROM (
SELECT order_id, SUM(price) AS total
FROM order_details
GROUP BY order_id
) AS new_data
WHERE orders.id = new_data.order_id;
まとめ
PostgreSQLを使えば、柔軟な条件付き更新が可能です。この記事で紹介した方法を活用すれば、SELECT結果を活用した効率的なデータ操作が実現できます。ぜひ、実際の業務でも活用してみてください!
コメント