質問

普通の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のみとはいえません。

この回答へのお礼

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

データベースは何を使っているんでしょうか?

ACCESS、ORACLE、SQLサーバーなどありますが…。

この回答への補足

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

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

でした。これならサブクエリを使うことはできないと思うのですが・・・どうでしょう?

このQ&Aは役に立ちましたか?4 件

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

新しく質問する

注目の記事

おしトピにAndroid版アプリが登場

話題のトピックにさくっとコメントできる「おしトピ」に Android版アプリが登場! もっと身近に使いやすくなりました。
今ならダウンロードで話題の掃除ロボットや全天球カメラが 当たるプレゼントキャンペーンも実施中。


新しく質問する

このカテゴリの人気Q&Aランキング

毎日見よう!教えて!gooトゥディ

べんりQ&A特集