DB内で他のテーブルからSELECTした内容でUPDATEを行いたいときがある.
SELECTした内容をINSERTに使うINSERT~SELECT構文みたいなのもあるので,どうかなーと思ったら各DBMS毎に文法が違うのね…
PostgreSQLの場合
■オデの日記@WEB系: postgresqlでSELECTした結果でUPDATEをかける
■PostgreSQL/SQL/SELECT結果でUPDATE – yanor.net/wiki
UPDATE target_table
SET target_column = s.value
FROM (SELECT * FROM source_table) AS s
WHERE target_table.id = s.id
個人的にはSETとWHEREの間にFROMが入るのが直感的でない…と思う.
MySQLの場合
■MySQL/SELECT結果でUPDATEする – 俺の基地
■yoko_net Blog : 結合したSELECT結果でUPDATEするTips(for MySQL)
UPDATE target_table,source_table
SET target_table.taraget_column = source_table.source_column
WHERE target_table.id = source_table.id
個人的にはUPDATEの後に両方のテーブル名を並べるのがまぎらわしい…と思う.