• ベストアンサー

Access2002 2つのテーブルのマージ方法

いつもお世話になっております。 クエリについてお聞きします。 現在、2つのAccessDBが稼動しており、それを1つにまとめる作業をしています。 2つのDBには似通ったテーブルが存在し、それをマージする方法で悩んでいます。 テーブルA ・社員番号 ・社員氏名 ・フリガナ ・会社コード ・部署コード テーブルB ・従業員コード ・従業員名カナ ・従業員名 ・所属コード フィールドの定義としましては、 社員番号=従業員コード 社員氏名=従業員名 フリガナ=従業員名カナ 部署コード=所属コード となります。 全てテキストのレコードです。 これを、テーブルAを正にして、テーブルBのデータをAにマージしたいのです。 要件としましては、 1.テーブルAに存在する社員コードにマッチするレコードはそのまま残す(Bのデータは無視) 2.テーブルAに存在せず、Bに存在するものをAに追加する ということです。 クエリを使って色々試しましたが、どうしてもテーブルAに存在するものもアップデートしてしまい、困っています。 どなたかご教授願えれば幸いです。 よろしくお願いいたします。

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

  • ベストアンサー
  • Anzu4699
  • ベストアンサー率59% (26/44)
回答No.1

>クエリを使って色々試しましたが、どうしてもテーブルAに存在するものも >アップデートしてしまい、困っています。 リンクテーブルに関しては説明は要らなさそうなので、 純粋にマージ手順を示しておきます。 (1)TABLE-BとTABLE-Aの不一致クエリーを作成 (参考例SQL Query名=Q_不一致) SELECT T_BBB.従業員コード, T_BBB.従業員名カナ, T_BBB.従業員名, T_BBB.所属コード FROM T_BBB LEFT JOIN T_AAA ON T_BBB.従業員コード = T_AAA.社員番号 WHERE T_AAA.社員番号 Is Null (2)(1)で作成した差分をTABLE-Aに追加するクエリーを作成 (参考例SQL) INSERT INTO T_AAA ( 社員番号, フリガナ, 社員氏名, 部署コード ) SELECT Q_不一致.従業員コード, Q_不一致.従業員名カナ, Q_不一致.従業員名, Q_不一致.所属コード FROM Q_不一致 注意点(1) TABLE-Aの項目で、Null禁止(値要求=はい)になっている項目がある場合 その項目に対し、カラ(Null)のデータをセットしようするとエラーになりますので その時は、一時的にNull許可(値要求=いいえ)にして、追加完了後元に戻しておく事。

camo-tech
質問者

お礼

早速の回答、ありがとうございました。 結果、うまく行きました。 差分を作って追加、という手順は、目からウロコでした。 初心者ですみません^^; どうもありがとうございました。

その他の回答 (1)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

テーブルAの名前を「TA」、テーブルBの名前を「TB」とした時、 UPDATE TA RIGHT JOIN TB ON TA.社員番号=TB.従業員コード SET TA.社員番号 = TB.従業員コード, TA.社員氏名 = TB.社員氏名, TA.フリガナ = TB.従業員名カナ, TA.部署コード = TB.所属コード WHERE TA.社員番号 Is Null; では、どうでしょうか。

camo-tech
質問者

お礼

ご回答ありがとうございました。 #1さんの方法でうまく行ってしまいましたが、30246kikuさんの方法も試してみようと思います。 どうもありがとうございました。

関連するQ&A

  • 2つのテーブルAとBをマージして新しいテーブルCを作成したいのです。

    2つのテーブルAとBをマージして新しいテーブルCを作成したいのです。マージするときは、最新の売上日フィールドをもつレコードを取得します。環境はAccess2000です。どんなSQL文を作成すればいいのでしょうか?  また、テーブルAにしかないレコード、又はテーブルBにしかないレコードは、そのままテーブルCに追加したいです。 ※下記テーブルAとBは、Access内に存在します。テーブルCはAとBのマージ後の結果作成されるテーブルです。 テーブルA 顧客番号   売上日   商品名   備考    1  2000-01-01  ふでばこ   A    2  2000-02-02  鉛筆     A    3  2000-03-03  定規     A    4  2000-04-04  シャーペン  A   99  2000-09-09  パソコン   A テーブルB 顧客番号   売上日   商品名   備考    4  2001-04-04  シャーペン  B    2  2000-02-02  鉛筆     B    3  2001-03-03  定規     B    1  1999-01-01  ふでばこ   B  100  2005-11-11  ワープロ   B テーブルAとBを、最新の売上日の条件でレコードを取得し新しいテーブルCを作成する。 テーブルC 顧客番号   売上日   商品名   備考    1  2000-01-01  ふでばこ   A    2  2000-02-02  鉛筆     A    3  2001-03-03  定規     B    4  2000-04-04  シャーペン  A   99  2000-09-09  パソコン   A  100  2005-11-11  ワープロ   B SQL文で処理可能なのでしょうか?

  • テーブルのマージSQLに関して

    初歩的なSQLの質問で申し訳ありません。 以前にも同じような内容で投稿させて頂きましたが、教えて下さい。 下記のような、ある異なる名前の同項目を持つ2つのテーブルが存在します。 《テーブル》 Aテーブル   社員番号、日付、内容、所属、時間、結果 Bテーブル  社員番号、日付、内容、理由  ※ 内容に関しては、AテーブルとBテーブルで全く違います。 これらの2つのテーブルをマージさせ、社員番号毎の内容毎、日付順に したいと考えています。 以前に以下のようなUNIONを教えてもらいましたが、所属、時間、結果、理由という 項目全てを出力するとした場合、どのように記載すれば良いでしょうか? UNIONの場合、項目が異なるとエラーとなってしまうかと、、、 《UNIONのSQL》 SELECT * FROM ( SELECT 社員番号, 日付, 内容 FROM Aテーブル UNION SELECT 社員番号, 日付, 内容 FROM Bテーブル ) ORDER BY 日付, 社員番号, 内容 教えて下さい。 よろしくお願いします。

  • ファイルメーカーでアクセスクエリーみたいな作成方法

    データベースソフトのアクセスは多少知識があります。 ファイルメーカーでアクセスで言うところのクエリーはどの様に作成したらよろしいでしょうか。 例えば、従業員コードをキーとして テーブル1(従業員マスタ)  従業員コード  氏名  入社年月日 テーブル2(住所録)  従業員コード  住所 テーブル3(家族構成)  従業員コード  配偶者  扶養1 上記テーブルを3つ作成し、アクセスで言うところのクエリーみたいな感じで  従業員コード  氏名  住所  配偶者 上記レコードをまとめたテーブルを作成したい。   何か参考になる資料(本)のご紹介、もしくは教えてもらえませんでしょうか。 よろしくお願い致します。

  • ACCESS2000を使って複数のテーブルを照合する方法について

    ACCESS2000を使用して下記のような3つのテーブルがあったとします。 1.メインテーブル   商品名   コード 1 りんご   012 2 りんご   022 3 バナナ   200 4 バナナ   201 5 イチゴ   100 2.A商店テーブル   商品名   コード 1 りんご   012 2 バナナ   200 3 バナナ   201 3.B商店テーブル 1 りんご   022 2 バナナ   201 テーブル1~3を照合して作製したいクエリ   商品名   コード  A  B 1 りんご   012  ○  × 2 りんご   022  ×  ○ 3 バナナ   200  ○  × 4 バナナ   201  ○  ○ 5 イチゴ   100  ×  × のように複数のテーブルを参照し、テーブル1のフィールドにある内容と同一のものがどのテーブルに存在するまたは、存在しないをがわかるような一覧リストを作成したいのですが、具体的にはどのようにしたら良いのでしょうか。 よろしくおねがいいたします。

  • Accessでテーブルにあるレコードが、選択クエリで抽出されない

    Accessについての質問です。 社員名簿を作ろうと思い入力用のフォームを作成して、そこから新入社員の氏名や部署などを入力しました。 それで、テーブルの内容を見ると新入社員の氏名や部署などは入っているのですが、 選択クエリを使って、新入社員の氏名で検索をしても引っ掛かりません。 テーブルに存在しているレコードを検索しても、引っ掛からないのはなぜでしょう?

  • FileMakerで2テーブルを(仮想的に)マージ

    これまでずっとMicrosoftのAccessを使ってきたのですが、 最近FileMakerを使い始めまして、分らないことだらけです。 以下の実現方法をお分かりの方がいらっしゃいましたらお教えください。 まず、Accessの世界の話をします。 例えば、A.mdb, B.mdb, C.mdbという3つのファイルがあるとします。 A.mdbにはAテーブル、B.mdbには、Bテーブルがあります。 Aテーブルには、(1)商品名、(2)値段、(3)個数、...というフィールドがあります。 Bテーブルには、(1)製品名称、(2)価格、(3)在庫、...というフィールドがあります。 今、C.mdbから、A.mdbのAテーブルとB.mdbのBテーブルを参照して、 これら2つのテーブルをマージして、 例えば、(1)商品名称、(2)定価、(3)在庫数というフィールドを持った Cクエリ(仮想テーブルのようなもの)を作成しています。 以上をFileMakerで実現するには、どうすればよいのでしょうか?

  • ACCESSで複数テーブルのクエリ抽出

    ACCESSで複数テーブルのクエリ抽出 初めて投稿させてもらいます。 テーブル1・・・社員ID(主キー)、氏名 テーブル2・・・社員ID(重複キー有)、顧客ID テーブル3・・・社員ID(重複キー有)、得意先ID テーブル4・・・顧客ID、顧客氏名 テーブル5・・・得意先ID、得意先 上記のテーブル内容を1つのクエリで全部抽出するとき、 テーブル1の社員ID[a]とテーブル2の社員ID[a] と テーブル1の社員ID[a]とテーブル3の社員ID[a] を分けて抽出する方法ってありますか? クエリの結合プロパティで テーブル2の全レコードとテーブル1の同じ結合フィールドと テーブル3の全レコードとテーブル1の同じ結合フィールドにすると 「あいまいな外部接続が含まれているのでSQLを実行出来ません」とエラーになり、 テーブル1の全レコードとテーブル2の同じ結合フィールドと テーブル1の全レコードとテーブル3の同じ結合フィールドにすると 社員ID[a]、顧客ID[1]、得意先ID[α]、顧客氏名[吉田]、得意先[○○商事] 社員ID[a]、顧客ID[1]、得意先ID[β]、顧客氏名[吉田]、得意先[△△金融] みたいになってしまうのです。 やりたい結果は 社員ID[a]、顧客ID[1]、得意先ID["空欄"]、顧客氏名[吉田]、得意先["空欄"] 社員ID[a]、顧客ID["空欄"]、得意先ID[β]、顧客氏名["空欄"]、得意先[△△金融] 説明下手ですいませんが、ご教授の程よろしくお願いします。

  • アクセスのデータ抽出

    現在テーブルA(支店コード、支店名、郵便番号、住所)とテーブルB(支店コード、社員番号、商品Aの売上数、商品Bの売上数・・・※商品名ごとにレコードを持っています。)の2つのテーブルを使っています。 これをクエリで抽出しているのですが、社員一人につきひとつのレコードしか抽出されません。 売上のない支店も全て抽出し、実績報告書として印刷するため、テーブルAとBに結合のプロパティでテーブルAの全てを選んでいるため、これ以外の方法でテーブルBのデータ全てを抽出したいのですが、何か方法はありますか?

  • ACCESSのテーブル結合に関して

    初歩的な事で申し訳ありませんが、教えて下さい。 以下のように3つのテーブルが存在し、検索条件をBテーブルの仕入先コードが"AAA"と 指定した際に、 発注番号、発注日付、仕入先コード、仕入先名 という形でOUTPUTしようと考えています。 その場合、クエリではどのように結合すれば良いでしょうか。。。 Aテーブルの発注番号とBテーブルの発注番号、Bテーブルの仕入先コードとCテーブルの 仕入先名という結合の形では、条件の"AAA"が1件しかないにもかかわらず、複数件出力されて しまうかと思われます。 《テーブル内容》 Aテーブル 発注番号 発注日付 Bテーブル 発注番号 仕入先コード Cテーブル 仕入先コード 仕入先名 ※ Bテーブル、Cテーブルの仕入先コード"AAA"は、それぞれ1件ずつしかない。 教えて頂きたいと思います。

  • Access、Aテーブルにあって、Bテーブルにない

    Access初心者です。 Aテーブルに存在するレコードかつBテーブルに存在しないレコードを抽出したい。 例えば、 Aテーブル 100 300 Bテーブル 100 200 の場合、300のみ抽出したい。 どのようにすれば抽出できますか。 よろしくお願いします。