Edited at

Postgresでまとめて複数のカラムをupdateをする方法

More than 5 years have passed since last update.


postgresのfrom句


  • postgresにはfromlistというものがある。

  • 下の例のようにaccountsのtableの条件からwhere要素やselect要素の値を変更することができる

UPDATE

employees
SET
sales_count = sales_count + 1
FROM
accounts
WHERE
accounts.name = 'Acme Corporation'
AND
employees.id = accounts.sales_person;


sqlの中にテンポラリのデータテーブルを作って利用する

select * from (SELECT unnest(ARRAY['a','b']) as a, unnest(ARRAY[2,3]) as b) AS t;

a
b

a
2

b
3

(2 rows)


テンポラリのテーブルを埋め込んで更新するとかどうだろう


  • 上の二つを応用したら、updateを同時に行うことがpostgresでできる。

UPDATE

employees
SET
sales_count = sales_count + 1
FROM
select * from (SELECT unnest(ARRAY['a','b']) as name, unnest(ARRAY[2,3]) as sales_person) AS accounts;
WHERE
accounts.name = 'Acme Corporation'
AND
employees.id = accounts.sales_person;


参考