SQLで他のテーブルから更新する方法

このQ&Aのポイント
  • SQLを使用して他のテーブルからデータを更新する方法について説明します。
  • 顧客テーブルとNewTableからデータを結合し、顧客テーブルにNewTableの情報を更新するSQL文の例を紹介します。
  • SQLを実行する際の注意点やエラーへの対処方法についても解説します。
回答を見る
  • ベストアンサー

SQLを使って他のテーブルから更新したいのですが

状況説明 テーブル:顧客→マスターファイルで住所や電話がブランク テーブル:NewTable→住所や電話番号でデータを持っている NewTableの内容を顧客テーブルに更新したい SQL→ UPDATE 顧客 INNER JOIN NewTable ON 顧客.店舗名 = NewTable.店舗名 SET 顧客.客室数 = NewTable.客室数, 顧客.郵便番号 = NewTable.郵便番号, 顧客.都道府県 = NewTable.住所, 顧客.店電話 = NewTable.電話番号, 顧客.店FAX = NewTable.FAX NO, 顧客.オープン日 = NewTable.オープン日; 実行方法→ これが正しいかどうか分からないのですが、 モジュールのオブジェクトを選んで 新規作成を選ぶとVBモードになります。 ここでイミディエイト画面を出して 上記のSQLをそのまま入れ、 実行のため、Enterキーをたたいたら エラーが発生→ コンパイラエラー 修正候補:ステートメントの最後 と出ました。 質問→ そもそもSQLの実行をイミディエイト画面からでいいのかも わかりません 何かアドバイスいただけますでしょうか

  • ppmi
  • お礼率88% (331/372)

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> 何かアドバイスいただけますでしょうか 土俵はACCESSという認識で良いですか? 【クエリとして実行するなら】 1)オブジェクト「クエリ」で、新規作成>デザインビューをクリック 2)「テーブルの追加」で、なにも追加せず「OK」で閉じる 3)左上の「デザインビュー」アイコンの右▼に「SQLビュー」があるからクリック 4)上記のSQL文を貼り付け(最初にあるものは置き換えて消してしまう) 5)赤い!アイコンをクリックすると実行される 【VBAとして実行するなら】 1)オブジェクト「モジュール」で、新規作成 2)Sub 実行() でも適当に作成 3) DoCmd.RunSQL "Update ..."として上記の上記のSQL文を貼り付け 4)F5か、F8で実行 でいかがでしょう?

ppmi
質問者

お礼

わかりました、ありがとうございました。 オブジェクト「クエリ」で実行するんですね やったら出来ました。 助かりました。

関連するQ&A

  • 【SQL】他テーブルに含まれる値に合致する行を抽出

    SQL素人ですが、SQLが使えるツールからデータを抽出したく、SQL文を教えていただけますでしょうか。 ・テーブルA:会員データが格納されている(氏名、メルアド、郵便番号等が入っている) ・テーブルB:特定の郵便番号のみが入っている テーブルAのデータの中からテーブルBに入っている郵便番号に合致するメルアドを抽出したい。 何卒宜しくお願い申し上げます。

  • テーブル設計につきまして(正規化)

    顧客情報管理サイトを作ろうと思っています。 ・非正規化  {顧客コード , 氏名 , かな名 , 性別 , 郵便番号 , 都道府県 , 市区町村 , 建物名 , 電話番号 ,  FAX番号 , 携帯番号1, 携帯メール1 , 携帯番号2 , 携帯メール2 , 顧客ランク,備考}  の列を考えております。 ・正規化テーブル  1.顧客情報テーブル   {顧客コード , 氏名 , かな名 , 性別 ,郵便番号(外部キー) , 建物名 , 電話番号 ,   FAX番号 , 携帯番号1, 携帯メール1 , 携帯番号2 , 携帯メール2 , 顧客ランク,備考}  2.郵便情報   {郵便番号(主キー) , 都道府県 , 市区町村 これ以上、正規化できないと思っているのですが、顧客情報テーブルをもっと効率よく テーブルを設計し、正規化できるものでしょうか? よろしくお願いします。

  • ACCESS2007 VBA 「INSERT INTO~」について

    ACCESS2007を使用しています。 VBAにて、下記の内容を記述しています。(前後は略しています) 特にエラーも出ていなくて、最後まできちんと実行されるのですが、顧客マスタにデータが追加されません。 strSQL = "INSERT INTO 顧客マスタ(得意先ID,得意先名,得意先名カナ,郵便番号,住所,電話番号,FAX番号) " & _ "VALUES(" & tID & ",'" & rs!顧客名 & "','" & rs!カナ & "','" & rs!郵便番号 & "','" & rs!住所 & "','" & rs!電話番号 & "','" & rs!FAX & "');" db.Execute strSQL イミディエイトウィンドウで、strSQLの内容を表示してみたら、下記のようになりました。 特におかしな所もなく、テーブル名も正しいです。 INSERT INTO 顧客マスタ(得意先ID,得意先名,得意先名カナ,郵便番号,住所,電話番号,FAX番号) VALUES(9265,'テスト顧客','テスト','5555555','テスト住所','111-111-1111','222-222-2222'); その他にも、「INSERT INTO~」を使ってテーブルにデータを追加していますが、それはちゃんと追加されていて、なぜか顧客マスタのみ追加されません。 エラーも出ないので解決できなくて困っています。 よろしくお願いします。

  • access2007同一構造のテーブルを結合

    複数の同一構造のテーブルを結合したいのですが、、、 下記サイトを見てユニオンクエリーとやらを使うまでは理解しましたが、 http://www.serpress.co.jp/access/no005.html 細部が理解できません。SQL文が理解できません。。。 ●テーブル1=saitama、テーブル2=chiba、テーブル3=tokyo、テーブル4=kanagawa ●フィールド内容=会社名/郵便番号/住所/電話番号/FAX/業種 と言う内容ならば、どの様なSQL文?を書けば良いのでしょうか?

  • SQLで他のテーブルを参照して該当個所を一発更新したい

    例えば次のような二つのテーブルがあるとします。 住所録(氏名,住所,メモ) 電話帳(氏名,電話番号) ※(住所録の氏名はキーだが電話帳の氏名はキーではない) この時、住所録テーブルに対して、 電話帳に電話番号がない名前全てについて メモに、"電話番号は不明"と言う更新をしたいのですが… UPDATE 住所録 SET メモ='電話番号は不明' WHERE … のWHERE句には何と書けばいいのか分からなくて困っています。 それともこういう時の更新はそもそも出来ないのでしょうか? 回答よろしくお願いします。

  • SQLサーバーのテーブルに対してアクセスで更新クエリを行ないたい

    こんばんは。 ・vista ・アクセス2003 ・SQL Server 2005 です。 SQL ServerからテーブルをMDBへリンクしているのですが そのテーブルに対し、アクセス側で更新クエリを実行しようとすると 実行時エラー '3157': ODBC--リンク テーブル'テーブル名'での更新に失敗しました。 [Microsoft][ODBC SQL Server Driver]時間切れになりました。(#0) と言うエラーになり、更新クエリができません。 どうすればアクセスでSQLサーバーのテーブルに対して更新クエリを行えるのでしょうか? よろしくお願いします。

  • Access2007テーブルの更新

    Access2007で住所録を作成していますが、すでにあるテーブルに名前と郵便番号があります。 そのテーブルに住所を追加し、住所入力支援を設定しましたが、既存のデータには住所が出ません。新規にデータを入れると住所は出ます。 どうしたら、既存のデータで郵便番号から住所が出ますでしょうか。 よろしくお願いします。

  • アクセスでテーブルの一部を他テーブルを使って更新をしたい

    [ユーザーリスト]というテーブルがあり、その中にはユーザー名、住所、電話番号などが入っています。 後から電話番号の更新があったユーザーを修正するために、新しい電話番号とユーザー名だけが入っている[更新リスト]というテーブルを使って、[ユーザーリスト]の電話番号だけを一括で修正することはできるのでしょうか。 わかりにくい説明で申し訳ありませんが、ご回答の方宜しくお願いします。

  • SQL2000からSQL2005へのレプリケーション

    日々更新されるSQL2000(サーバー2000)上のテーブルA、テーブルB、テーブルCをSQL2005(サーバー2005)上で参照するために、レプリケーションの機能を使って、SQL2000をパブリッシュとしてSQL2005上をサブスクライバとしてプルサブスクリプション(スケジュール実行)でSQL2005上にテーブルA、テーブルB、テーブルCを生成させたいと考えております。 SQL2000側でパブリッシュの設定、2005側からプルサブスクリプションの設定ともに問題無く設定できたのですが、いざ実施すると 下記のエラーが出て実行できませんでした。 お聞きしたい点としてはそもそも上記の方法でのSQL2000から2005へ テーブルコピーが可能なのか? 無理な場合は、他にどの様な方法でスケジュールで任意のテーブルを 2000から2005へコピーするあるか教えていただけますでしょうか? ------------ ユーザー 'HOGEDOMAIN\サーバー2000$' はログインできませんでした。 (ソース: MSSQLServer, エラー番号: 18456) ヘルプの表示: http://help/18456

  • SQLで他のテーブルの項目を参照する方法

    SQLでは表の中で他の項目を参照することは出来るでしょうか。 具体的にやりたいのは例えば次のようなことです。 得意先リストのデータベースの中に、 (得意先ID,住所,担当者名,TEL,FAX)というフィールドからなる「商品発送先」というテーブルを作ります。 もうひとつ別に、 (得意先ID,住所,担当者名,TEL,FAX)というフィールドを持つ「請求書発送先」というテーブルも作ります。 同じ得意先でも2つの発送先の担当者名だけが違ったり、住所も違ったりする場合があるからです。 しかし大部分の場合は同じなので、そういう場合に両方のテーブルに同じ値を書くとメモリーの無駄ですし、変更があったときに両方を修正しなければなりません。 そこで、例えば「請求書発送先」の"住所"が「商品発送先」の"住所"と同じであれば、その項目には同じ住所を書く替わりに"商品発送先に同じ"とか(あるいはそれを意味するなんらかのコード)を記入しておき、select文などでデータを出力する際に、"商品発送先に同じ"という記述を見つけたら「商品発送先」テーブルの対応する項目の内容を出力する。 というようなことはできないでしょうか。 もちろんデータベースの操作にPHPなどを使ってプログラムを組めばそういうことは簡単に出来ますが、SQLだけでそういうことができる方法があるかどうか知りたいのです。 あるいは、そういうことをしたいのならデータ構造をこういう風に変えた方がいい、というアドバイスでも結構です。 よろしくおねがいします。

    • ベストアンサー
    • MySQL

専門家に質問してみよう