- ベストアンサー
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を使っています。
- みんなの回答 (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のみとはいえません。
その他の回答 (2)
- khazad-lefty
- ベストアンサー率44% (296/668)
データベースは何を使っているんでしょうか? ACCESS、ORACLE、SQLサーバーなどありますが…。
補足
ACCESSです。質問にも書いたとおりです。 VBAと言うと普通ACCESSですよね?
- Mizyu
- ベストアンサー率41% (245/593)
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 ) これでできます。
補足
ありがとうございます。 私もサブクエリを考えていたんですが、結合の入ったUPDATE文と全く同じ機能を果たすことができるんですか? それとすいません。2行目の式を少し間違えていました。 SET テーブルA.フィールドA=テーブルB.フィールドF でした。これならサブクエリを使うことはできないと思うのですが・・・どうでしょう?
お礼
SET句とWHERE句とサブクエリを別々に作るのはいいのですが、レコードが複数存在した時につじつま合うんでしょうか? 2つ目のレコードに3つ目の値を放り込んじゃったりとか?