
ひとつのテーブルの情報を、もうひとつのテーブルに反映させられなくて困っています。
おそらく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についてご助言をいただけませんでしょうか?
もしご存知の方おられましたら、ご教示をお願いできませんでしょうか?
以上です
No.1ベストアンサー
- 回答日時:
>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を持ち出すまでもないような気もしますが・・・
ご回答ありがとうございます。
本日さっそく試させていただきます(access環境は自宅にはありませんので)。
ご指摘通りaccessなのでデザインビューを用いればいいのですが
すみません。まだ使い方をよく理解できていませんで。
自分の努力不足を棚に上げて質問しまして、失礼しました。
プログラムで組んでいるため今回はVBAで処理しています。
また回答させていただきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グループ化したいのですが
-
大量データの取得処理について
-
ACCESS2002のupdateの副問合せ...
-
PL/SQLでテーブル名に変数を使...
-
列の既定値を取得したい
-
SQLite C/C++ でのテーブル数...
-
db2にて数値を3桁文字にて出力...
-
異なるスキーマからデータを抽...
-
データを削除しても表領域の使...
-
Viewにインデックスは張れ...
-
SQL*Loaderで、データを加工し...
-
ORA-00959: 表領域'****'は...
-
datapumpの実行方法について
-
DELETE文でFROM句を省略した場合
-
Data Pump で大量データインポ...
-
CLOB型へのINSERT
-
C#でaccdbファイルのテーブルの...
-
postgreSQLのint型は桁数指定が...
-
RDBのテーブル種類の違い
-
同じSELECT文同士でのデ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量データの取得処理について
-
列の既定値を取得したい
-
SELECT文で時間軸を行で取得する
-
ビューテーブル
-
db2にて数値を3桁文字にて出力...
-
オラクルテーブルで受け付けな...
-
Sybaseにてupdate時に特定のInd...
-
テーブル定義を調べるには
-
ACCESSエラー「制限されたデー...
-
ACCESSのWHERE文でのAND40個制限
-
ACCESSのテーブルを毎日定刻に...
-
PostgreSQL:ラジオボタンを用い...
-
DB2のSQLコマンドについて教え...
-
ACCESS2002のupdateの副問合せ...
-
SQL文のテーブルについて
-
SQLServerのテーブル定義書(?...
-
ACCESS2000で更新のあったテー...
-
SQLite C/C++ でのテーブル数...
-
データを削除しても表領域の使...
-
Viewにインデックスは張れ...
おすすめ情報