- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:select結果でのupdate)
select結果でのupdate
このQ&Aのポイント
- テーブルAのnameに、テーブルBのnameを入れたい。
- テーブルAとBはidでリレーションを張っている。
- UPDATE文でnameを更新する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
すいません、補足です。 UPDATE hoge1 SET name = (select b.name from hoge2 b , hoge1 a where b.id = a.id ) ; の何が悪いか、という点ですが、 副問い合わせの中で「hoge1 (AS) a 」としてるのに、最初にupdate hoge1 としてるのが アウトとなるようです。ただこの場合、AS句のスコープも関係してきますので、 こういう場合は素直にテーブル名を書いたほうがよいです。 http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.4-ja/queries-table-expressions.html#QUERIES-FROM 辺りがヒントです。
その他の回答 (1)
- tanshio2
- ベストアンサー率54% (20/37)
回答No.1
hoge1 を test1 hoge2 を test2 hoge1.name を name1 hoge2.name を name2 に置き換えて読んでください。 update test1 set name1 = (select name2 from test2 where test1.id = test2.id) where id = (select id from test2 where test1.id = test2.id) これでうまくいきました。
お礼
ありがとうございます。 たしかに、テーブル名を直で書くと動作しますね。 なるほど。ASのスコープが原因なのですね。。。。 結局今回はPGでやっちゃったのですが次回から使おうと思います。 ありがとうございました。