みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ACCESS2002のupdateの副問合せについて教えてください

ひとつのテーブルの情報を、もうひとつのテーブルに反映させられなくて困っています。
おそらくupdateの副問合せの書き方が悪いと思うのですが、どこが悪いのか分かりません。
access2002 VBAで、同じフィールド構成を持つ2つのテーブルがあります。

TABLE_A
--------------------------
|P_Key | Field1 | Fieled2|
+------+--------+--------+
|111111|AAAA|BBBB|
|222222|CCCC|DDDD|
|333333|EEEE|FFFF|
|444444|GGGG|HHHH|
--------------------------

TABLE_B
--------------------------
|P_Key | Field1 | Fieled2|
+------+--------+--------+
|222222|ZZZZ|YYYY|
|333333|XXXX|WWWW|
--------------------------

このうち、ひとつのテーブル(TABLE_A)のField1 と Field2 の値を
もうひとつのテーブル(TABLE_B)のField1 と Field2 の値に変更したいのです。
条件は、P_Keyが同一のレコード同士です。

実行結果は以下のようにしたいのです。

TABLE_A (TABLE_Bは更新しないため変更無し)
--------------------------
|P_Key | Field1 | Fieled2|
+------+--------+--------+
|111111|AAAA|BBBB|
|222222|ZZZZ|YYYY|
|333333|XXXX|WWWW|
|444444|GGGG|HHHH|
--------------------------

VBAでupdateのSQLを書いているのですが、うまくいきません。
以下のSQLではDMLが正しくないのエラーになってしまいます。
(すみません。正式なエラーメッセージは失念しました)

update TABLE_A set( TABLE_A.Field1,TABLE_A.Field2 ) =
( select TABLE_B.Field1,TABLE_B.Field2 from TABLE_B
where TABLE_A.P_Key = TABLE_B.P_Key );

テーブル名に別名をつけたりしても同様にDMLが正しくないと怒られます。


質問は、以下の2つです。
1.上記更新は、ひとつのupdateのSQLで可能でしょうか?
  それともTABLE_B を Selectでまわして、TABLE_Aのレコードを一行ずつ
  更新していく必要があるのでしょうか?
2.1.が可能の場合、私の書いたSQLについてご助言をいただけませんでしょうか?

もしご存知の方おられましたら、ご教示をお願いできませんでしょうか?
以上です

投稿日時 - 2007-06-29 00:23:47

QNo.3124237

困ってます

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

>1.上記更新は、ひとつのupdateのSQLで可能でしょうか?
可能です

>2.1.が可能の場合、私の書いたSQLについてご助言をいただけませんでしょうか?
この程度のものならクエリデザインビューで作成できますから
デザインビューで作成して,SQLビューで表示するのが簡単ですね

下はそのようにして作ったものです
UPDATE TABLE_A INNER JOIN TABLE_B ON TABLE_A.P_Key = TABLE_B.P_Key
SET TABLE_A.Field1 = [TABLE_B].[Field1], TABLE_A.Fieled2 = [TABLE_B].[Field2];

それにVBAを持ち出すまでもないような気もしますが・・・

投稿日時 - 2007-06-29 02:03:25

補足

遅くなりました。確認できました。
ご丁寧な回答ありがとうございました。
感謝します。

投稿日時 - 2007-06-30 01:38:02

お礼

ご回答ありがとうございます。
本日さっそく試させていただきます(access環境は自宅にはありませんので)。
ご指摘通りaccessなのでデザインビューを用いればいいのですが
すみません。まだ使い方をよく理解できていませんで。
自分の努力不足を棚に上げて質問しまして、失礼しました。
プログラムで組んでいるため今回はVBAで処理しています。
また回答させていただきます。
ありがとうございました。

投稿日時 - 2007-06-29 07:19:39

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

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問