* SELECT結果でUPDATE [#j9082936]

** 前提 [#tf08d825]
 テーブル T1     テーブル T2
  id | num        id | num 
 ----+-----      ----+-----
   1 |             1 | 100
   2 |             2 | 200
   3 |             3 | 300 
 テーブル T1
  id | num 
 ----+-----
   1 | 100
   2 | 200
   3 | 300

 テーブル T2
  id | num 
 ----+-----
   1 |   1
   3 |   3
** 求めたい結果 [#j3be81ab]
 テーブルT1
  id | num 
 ----+-----
   1 | 1
   2 | 200
   3 | 3

** SQL [#edec769b]
 UPDATE t1 SET num = a.num FROM (SELECT * FROM t2) a WHERE t1.id = a.id;

** 注意 [#x1add8ed]
以下のような相関サブクエリを使ったUPDATEではid 2の行のnumがヌルになってしまう。
 UPDATE t1 SET num = ( SELECT num FROM t2 WHERE t2.id = t1.id );

 テーブルT1
   id | num 
 ----+-----
   1 |   1
   2 |    
   3 |   3


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS