- ベストアンサー
SQL 複数テーブルのupdate
- 複数テーブルの複数カラムをupdateしたい方へ
- SQLのupdate文を使って、テーブルAとテーブルBの複数カラムを同時に更新する方法についてご説明します。
- 特定の条件を満たすレコードのみを更新するために、複数のテーブルを結合してupdate文を実行します。必要なカラムと値を指定し、条件に合致するレコードを同時に更新することができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
where条件に別テーブルの結合を必要とするので、同時に更新したい・・・ ということならば、以下のようなupdate文を2回発行ではだめなんでしょうか? update tableB b set b.optionB='OK' where exists( select * from tableA a where a.student_id=b.student_id and a.name='山田' ); update tableA a set a.optionA='OK' where a.name='山田';
その他の回答 (2)
- uresiiwa
- ベストアンサー率45% (49/107)
1回のUPDATE文で複数テーブルの更新はできません。 質問の目的によりますが、 2回UPDATEしたくない事情としては、 アプリケーションからDBMSへの通信をどうしても1回にしたい、というためでしょうか? であれば、2テーブルを更新するようなPROCEDUREを作成し、それをコールするようにすれば、「アプリケーションからDBMSへ1回の通信で複数テーブルを更新する」ということは実現できます。
お礼
ご回答ありがとうございます! 2回UPDATEしたくない理由はいくつかあるのですが おっしゃるとおり、通信を1回にしたいというのもその一つです。 PROCEDUREというのは始めて聞きました! 調べてつかえるようにしてみます。 ありがとうございます☆
- dda167
- ベストアンサー率76% (55/72)
1つのUPDATE文で2つの表を同時に更新することはできないと思いますよ。 更新可能ビューを使えばできそうに思えますが、 「ORA-01776: 結合ビューを介して複数の実表を変更できません。」 というエラーになります。 マニュアルにも、 「結合ビューに対するINSERT、UPDATEまたはDELETE操作は、基礎となる実表を一度に1つしか変更できません。」 と記載されています。 http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19224-02/views.htm
お礼
ご回答ありがとうございます! マニュアル読みました。 やはり2つ同時は厳しいんですね。 別々で実行してみます☆
お礼
ご回答ありがとうございます! ”山田”という条件も固定ではなく違うDBから取得したいと考えていたので、 どうにか1つにならないかなぁっと考えていました。 でもやはり2つに分ける方がわかりやすですね。。 ありがとうございます☆