• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL 複数テーブルのupdate)

SQL 複数テーブルのupdate

このQ&Aのポイント
  • 複数テーブルの複数カラムをupdateしたい方へ
  • SQLのupdate文を使って、テーブルAとテーブルBの複数カラムを同時に更新する方法についてご説明します。
  • 特定の条件を満たすレコードのみを更新するために、複数のテーブルを結合してupdate文を実行します。必要なカラムと値を指定し、条件に合致するレコードを同時に更新することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.2

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='山田';

noname#229153
質問者

お礼

ご回答ありがとうございます! ”山田”という条件も固定ではなく違うDBから取得したいと考えていたので、 どうにか1つにならないかなぁっと考えていました。 でもやはり2つに分ける方がわかりやすですね。。 ありがとうございます☆

その他の回答 (2)

  • uresiiwa
  • ベストアンサー率45% (49/107)
回答No.3

1回のUPDATE文で複数テーブルの更新はできません。 質問の目的によりますが、 2回UPDATEしたくない事情としては、 アプリケーションからDBMSへの通信をどうしても1回にしたい、というためでしょうか? であれば、2テーブルを更新するようなPROCEDUREを作成し、それをコールするようにすれば、「アプリケーションからDBMSへ1回の通信で複数テーブルを更新する」ということは実現できます。

noname#229153
質問者

お礼

ご回答ありがとうございます! 2回UPDATEしたくない理由はいくつかあるのですが おっしゃるとおり、通信を1回にしたいというのもその一つです。 PROCEDUREというのは始めて聞きました! 調べてつかえるようにしてみます。 ありがとうございます☆

  • dda167
  • ベストアンサー率76% (55/72)
回答No.1

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

noname#229153
質問者

お礼

ご回答ありがとうございます! マニュアル読みました。 やはり2つ同時は厳しいんですね。 別々で実行してみます☆