• ベストアンサー

SQLで複数のテーブルと結合したUPDATE文

普通のUPDATE文はUPDATEするテーブル名を一つ記入して UPDATE テーブルA SET フィールドA = 値A WHERE テーブルA.フィールドB = 値B みたいな感じですが、私のしたい事はと言うと UPDATE テーブルA,テーブルB,テーブルC SET A.フィールドA = 値A WHERE テーブルA.フィールドA = テーブルB.フィールドB AND テーブルB.フィールドB = テーブルC.フィールドC AND テーブルB.フィールドD = 値D AND テーブルC.フィールドE = 値E という具合に複数のテーブルがUPDATEするテーブルA以外のところで、互いに条件で結ばれており、FROM句でUPDATEしないテーブル名まで宣言しないといけなくなっています。そもそもこういうFROM句を使うUPDATE文は実行可能かも不明です。どなたか解決策お願いいたします。ちなみに開発ソフトはVBAを使っています。

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

  • ベストアンサー
  • Mizyu
  • ベストアンサー率41% (245/593)
回答No.3

SET句にもサブクエリを使えますよ。 UPDATE テーブルA SET フィールドA = ( SELECT テーブルB.フィールドF FROM テーブルB,テーブルC WHERE テーブルB.フィールドB = テーブルC.フィールドC AND テーブルB.フィールドD = 値D AND テーブルC.フィールドE = 値E ) WHERE フィールドA = ( SELECT テーブルB.フィールドB FROM テーブルB,テーブルC WHERE テーブルB.フィールドB = テーブルC.フィールドC AND テーブルB.フィールドD = 値D AND テーブルC.フィールドE = 値E ) > VBAと言うと普通ACCESSですよね? VBAからODBC経由でOracleやSQL Serverという例もあるので 一概にはAccessのみとはいえません。

saimon296
質問者

お礼

SET句とWHERE句とサブクエリを別々に作るのはいいのですが、レコードが複数存在した時につじつま合うんでしょうか? 2つ目のレコードに3つ目の値を放り込んじゃったりとか?

その他の回答 (2)

回答No.2

データベースは何を使っているんでしょうか? ACCESS、ORACLE、SQLサーバーなどありますが…。

saimon296
質問者

補足

ACCESSです。質問にも書いたとおりです。 VBAと言うと普通ACCESSですよね?

  • Mizyu
  • ベストアンサー率41% (245/593)
回答No.1

UPDATE テーブルA SET フィールドA = 値A WHERE フィールドA = ( SELECT テーブルB.フィールドB FROM テーブルB,テーブルC WHERE テーブルB.フィールドB = テーブルC.フィールドC AND テーブルB.フィールドD = 値D AND テーブルC.フィールドE = 値E ) これでできます。

saimon296
質問者

補足

ありがとうございます。 私もサブクエリを考えていたんですが、結合の入ったUPDATE文と全く同じ機能を果たすことができるんですか? それとすいません。2行目の式を少し間違えていました。 SET テーブルA.フィールドA=テーブルB.フィールドF でした。これならサブクエリを使うことはできないと思うのですが・・・どうでしょう?

関連するQ&A

専門家に質問してみよう