複数のテーブルから複数条件で新規テーブルへ抽出するには?

このQ&Aのポイント
  • Windows2000、Access2000での住所録統合についての操作方法やサイトの参考情報を教えてください。
  • 複数のmdbファイルからデータを抽出して新しいテーブルを作成する方法について教えてください。
  • AccessのクエリやSQL、VBAを使用して、住所録のデータを統合する方法について教えてください。
回答を見る
  • ベストアンサー

複数のテーブルから複数条件で新規テーブルへ抽出するには?

こんにちわ。 Windows2000、Access2000という環境下で、 住所録の統合をしようとしています。 簡単な構成は、前任者が、グループ関連会社別に住所録のmdbを作っており、各テーブルのフィールドで主要なものは、「通し番号(各mdbごと)」「氏名」「会社名」「住所」です。 ここで、最終的にテーブルを一つにまとめれば完了としたいところなのですが、 2002年夏の時点での住所録A.mdb 2003年冬の時点での住所録B.mdb 2003年春の時点での住所録C.mdb とあり、それぞれにBの時点での新規入力・(住所等の)更新、Cの時点での新規入力・更新があるのです。 BはAを元に作られており、CはBを元に作られています。 ダブっている部分があるのです。 そこで、AとBを比較してAの中で「氏名」、「会社名」が同じもの以外と、Bのデータを新しいDBのテーブルへ、 新しくできたDBのテーブルとCのテーブルとを比較して、「氏名」「会社名」が同じものは、既存のレコードを消去してCのデータを追加するということをやりたいのです。 つまり、BやCでの更新・新規入力をうまく反映させた形の住所録にしたいのです。 Access自体の使い方に不慣れなもので、この作業がAccessのクエリ等の組み合わせでできるのか、それともSQLやVBAを駆使しないと無理なのかの判断もつきません。 どなたか参考になりそうな操作やSiteを知っていましたら、 教えてください。 よろしくお願いします。

  • kenton
  • お礼率74% (110/148)

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

  • ベストアンサー
  • souta_n
  • ベストアンサー率33% (79/234)
回答No.1

その3つのテーブルはフィールド構造は一緒でしょうか? 一緒ならUNIONクエリーを作成したら良いのではないでしょうか。 例えばテーブルA、B、Cがあって、いずれも名前、住所というフィールドがあるとしたら =操作方法= 1.クエリーをデザインビューで新規作成します。 2.テーブルの表示は、なにも選択せず閉じます。 3.画面左上のファイルメニューの下にSQLというボタンが出来ているはずです。 4.クリックするとSQLウインドが表示されます。SELECT;のみが表示されていると思います。 5.下記のようなSQL文を入力します。 =============================== SELECT A.名前,A.住所 FROM A UNION SELECT B.名前,B.住所 FROM B UNION SELECT C.名前,C.住所 FROM C; =============================== 重複データを省く述語DISTINCTを使用しなくても、おそらく重複データがある場合自動的に併合されると思います。 されなければHELPでDISTINCTの使い方を調べてSQL文を書き換えて見てください。

kenton
質問者

お礼

長らくお礼もせずに申し訳ありません。 ひとまず、この目的はExcelで実現させました。 Accessであれこれ組むには、 もっと勉強が必要だと実感しましたので。(^_^;) 今後もAccess自体は使ってみたいので、 何かの際に質問をするかもしれませんが、 その際にはよろしくお願いします。 ありがとうございました。

kenton
質問者

補足

回答ありがとうございます。 記述方法まで記載していただけて助かります。 しばらく反応がなかったもので、 回答がつかないのではないかと落ち込んでいたところでした。(^_^;) フィールドに関しては、A、B、C共に同じものだけになっています。 次に指摘して頂いた方法についてですが、 ”重複データが併合”されるという点に心配があります。 AにBやCでの新規入力・更新と同じデータあった場合 (つまりAとBに名前が同じであるが違う住所で載っているという場合など)、 Bのデータのみを残し、Aを削除した形の”併合”になるかです。 UNIONクエリというものがあるのは、なんとなく知っていたのですが、会社のPCに入っているOfficeがおかしいのか、Helpが表示されないので躊躇していました。 この条件を満たす重複データ削除については「DISTINCT」を利用しないと無理なのでしょうか? お手数だとは思いますが、再び回答を頂けるとありがたいです。m(__)m

その他の回答 (1)

  • souta_n
  • ベストアンサー率33% (79/234)
回答No.2

いい忘れです。 そのクエリーを元にテーブル作成クエリーを作って実行させれば新しいテーブルが出来ます。

関連するQ&A

  • 複数のテーブルに対して・・・

    過去に同様の質問があったかも知れませんが、Accessのバージョンがかなり古いので質問させて下さいね。 Access97(すみません、ホント古くて…)で、下のような顧客情報管理ファイルを作成しました。 テーブルA<→フォームA> ・顧客ID(主キー: テキスト型) ・氏名 ・情報A1, A2~ ・入力フォームB~への移動ボタン(同一IDレコードの表示) テーブルB<→フォームB> ・顧客ID(主キー: テキスト型) ・情報B1, B2~ テーブルC<→フォームC> ・顧客ID(主キー: テキスト型) ・情報C1, C2~ 最初からテーブルA~Cを結合したものを作ればよかったのですが、 それぞれのテーブルについて細かい入力項目が30~40個あるため、 分割して作成してしまいました(そして今後もテーブルは増える可能性大です)。 現在、テーブルAにだけ、20人分のデータが入っています。 今後も顧客数やテーブルが増える予定なのですが、 その都度テーブルごとに顧客IDをいれるのが面倒になってきました。 そこでお訊ねしたいのですが、テーブルA(を元にしたフォームA)に顧客IDを入れると、 テーブルBやCにも同じテキストが入力されるような設定は可能でしょうか。 最初、クエリーで連結しようとしたのですが、 既にテーブルAにいくつかデータが入っているせいか、どうも上手く反映されません。 単に私の参照方法が下手だったからかもしれませんが…。

  • アクセスのテーブル間で同じ値を入力したい

    アクセスでテーブル間で同じ値を入力したいのですが、出来ないのでしょうか? 例 テーブルA 氏名 年齢 住所 テーブルB 氏名 趣味 特技 のようなテーブル間で氏名は同じ値を入力し、その他は違う値を入力したいのです。更にテーブルA又はBのどちらで入力をしても反映されるようにしたいのですが、やり方を教えて下さい。宜しくお願いします。

  • 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のテーブルへのリンク

    いま、ASPのDBとして使っているAccessのファイル A.mdbがあります その中の一つのテーブルを別のAccessファイル B.mdbにリンクして、参照したいと思っています。 しかし、B.mdbからリンクするときに インポートすると、A.mdbの変更が反映されず、 リンクすると、B.mdbで変更したものがA.mdbにも反映されて困っています. やりたいことはB.mdbから安全に(変更なしで)A.mdbのテーブルを 閲覧したいのです. ・A.mdbの変更をB.mdbに反映したい ・B.mdbのテーブルの変更はA.mdbに影響がない と言うことです. どうかお力添えを よろしくお願いします.

  • リンクテーブル(複数)のパス変更について<ACC2003>

    現在ACCESS2003で出荷データから売上の集計が可能となるように 試みているのですが、都合上プログラムとデータを分けて処理 したいと考えております。 そこで、リンクテーブルを活用したいと思うのですが、環境に よってパスが変更となったり、データソースを切り替えたい時 などリンクテーブルのパスが変更できると非常に有難い状況です。 多少ネットで調べVBAで変更させる方法は見つかったのですが、 基本的に1つのリンク先を想定しているとの事で、複数は対応 していないようです。 例えば、リンクテーブルをそれぞれ TBL伝票データ   → C:\DB1\A.mdb TBL得意先マスター → C:\DB2\B.mdb TBL商品マスター  → C:\DB2\C.mdb と言ったように複数リンク先がある場合でそれぞれ パス変更が生じた場合に簡単に変更ができる方法は無いでしょうか。 (リンクファイルが1つの場合) Dim db As Database Dim a As TableDef Set db = CurrentDb() For Each a In db.TableDefs If Len(a.Connect) <> 0 Then a.Connect = ";database=" & NEWPATH '→新しいパス名 a.RefreshLink End If Next db.TableDefs.Refresh

  • 複数のテーブルから同じ条件で検索したい。

    例えば、テーブルがA,B,C,Dとあって、レイアウトはそれぞれ違います。 ですが、全てのテーブルに共通の項目もあります。 共通項目名:FLG このような前提で、 A,B,C,Dのデータを同じ検索条件で全ての内容を表示させたいのですができませんか? ベタに書くと select * from A where FLG='2'; select * from B where FLG='2'; select * from C where FLG='2'; select * from D where FLG='2'; と言う感じで結果を表示させたいのです。 実際にはテーブル名がものすごい数なので、ベタに書きたくないので、この部分をtab テーブルのtnameとかを使っていっぺんに検索結果が出せればありがたいのですけが・・・ こういうのはシェルとか使わないとだめですかね?(DBはオラクルです。)

  • 同じフィールドから複数条件のAND条件で抽出する方法

    お世話になります。 同じフィールドから複数条件のAND条件で抽出する方法 DBはAccessです。 フィールド1がA フィールド2がBという条件でしたら Select 抽出フィールド form テーブル where フィールド1=A and フィールド2=B で行っています。 フィールド1がAまたはBでしたら Select 抽出フィールド form テーブル where フィールド1=A or フィールド1=B で行っています。 それではフィールド1がAもBも満たす抽出はどのようにしたら良いのでしょうか。 例: 学生テーブル  フィールド 学生ID、氏名 履修科目テーブル  フィールド 学生ID、同一学生内連番、科目 というテーブル構成で英語、国語のどちらも履修している学生を抽出する場合などです。 2テーブルをリンクしたクエリを作ったのですが、 単にフィールド 学生ID、氏名、同一学生内連番、科目 なのでどちらも履修している学生を抽出できませんでした。 どのようにしたらよろしいのでしょうか。よろしくお願いいたします。

  • テーブルの結合?

    accessのテーブル2つを1つのテーブルにする方法を教えていただけないでしょうか。 《テーブルA》 氏名,住所,電話番号,・・・・ 《テーブルA》 氏名,健康保険番号,雇用保険番号,・・・・ 氏名は、テーブルAとテーブルBで一致しています。 とりあえず、1個のテーブルにしてしまいたいのですが。

  • Access]2つのテーブルを比較してフィールドの一部が一致したデータを抽出

    2つの名簿テーブルを比較してどちらのテーブルにも含まれている個人を抽出したいと考えております。 テーブル名とフィールドは以下のとおりです。 ==================== テーブル名「名簿A」 氏名 電話番号 住所 メールアドレス ==================== テーブル名「名簿B」 姓 名 電話番号 住所 メールアドレス ==================== たとえば、この2つの名簿をメールアドレスで一致したものを抽出する場合は選択クエリのデザインビューで「名簿A」のフィールドを読み込ませ、 メールアドレスフィールドの抽出条件として Like [名簿B].[メールアドレス] を入れれば抽出ができたのですが、メールアドレスは、名簿ごとに記入されていたりしなかったりするので、名前での一致を行いたいと思っています。 ここで問題なのが、名簿Aは「氏名」で入力されているのに対し、名簿Bでは「姓」と「名」が別フィールドになっております。 そこで自分なりにやってみたのが、選択クエリのデザインビューで「氏名」のフィールドの抽出条件として Like (*[名簿B].[姓]*) を設定するものでした。 これがうまくいけば最終的には Like (*[名簿B].[姓]*) And Like (*[名簿B].[名]*) という風にして、名簿Aの「氏名」フィールドに名簿Bの「姓」も「名」も入っているものを抽出できるかな?と考えたのですが、上記のように入力すると、自動的に Like ("*[名簿B].[姓]*") となってしまい、何も抽出されなくなってしまいました。 このような方法では希望する抽出は行えないのでしょうか? お分かりのかた、よろしくお願いいたします。

  • SQL文 抽出条件 複数の場合のやり方

    下記のような状況では どのようにSQL文を書けばよいのか教えてください。 例) テーブルA 氏名ID 住所 12345 東京都XXX区XXXX町1-1-1 12346 埼玉県XXX市XXXX町1-2-1 ・・・ テーブルB 住所(詳細に記載されているものもあれば、都道府県レベルのものもある) 東京都XXX区XXXX町 東京都▲▲区○○ 北海道 埼玉県◆◆市 ・・・ テーブルBに書いていある住所で始まる 全ての氏名IDを テーブルAから取り出したい。