SQLでもっともつまづきやすいupdate-select文というものがある。
select文による結果でupdateするが、その正しいやり方というのを見ると、おそらく誰もが気持ち悪いと思うはず。
SELECT結果でのUPDATE
qa.atmarkit.co.jp/q/98
setでデータを入れるサブクエリ内のSELECT文のwhere句ではなく、updateの更新対象を絞り込むUPDATEのwhere句をしっかり定義しないと、思った通りに動かないことがある...そして、サブクエリ内のwhere句の条件とupdate文のwhere句の条件は往々にして同じような条件になるため、SQLの文法を知らない人が見ると「何で同じような定義を2回しているんだ?」という疑問を持つことになる。更新先の絞り込みをしないと更新元がない時に問題を起こすので、同じような条件を指定しているのだ。これを解決する手段としてpostgresとしてはupdate文にfor文を連結して更新対象と更新結果を出力するselect文を書くことができる。これによりupdate文にselect文のサブクエリを連結せずにスムーズにデータ挿入することが可能になる。