• ベストアンサー

Access 複数テーブルのリレーションシップ

Access2013  4種類の名簿をそれぞれのテーブル(4種類)で管理してありますが、 同じ方(氏名)が4種類の名簿全部には無く、2つや3つの名簿にばらばらにあります。  この4つのテーブルを同時に表示し入力できる分割フォームをつくりたいのですが、 この際の、4つテーブルの氏名をリレーションシップする結合プロパティの設定方法を教えて下さい。 あるいは、クエリのそれぞれのテーブルのフィールド(氏名)の抽出条件になんと書き入れたらよいか。教えて下さい。 宜しくお願いします

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

  • ベストアンサー
回答No.2

> 同じ方(氏名)が4種類の名簿全部には無く、2つや3つの名簿にばらばらにあります。 この時点で、一つの分割フォームに同時に表示して入力するというのは不可能ですね。 テーブルの設計変更が必要です。 それと、キーフィールド(結合するフィールド)が氏名しかないという点も、#1の方が指摘している通りまずいですね。 とりあえず現状は、同姓同名 は存在しないという前提で、下記のようにしてください。 1.まず、クエリを新規作成してSQLビューにして下記のSQLを記述します。 SELECT 氏名 FROM 名簿1 UNION SELECT 氏名 FROM 名簿2 UNION SELECT 氏名 FROM 名簿3 UNION SELECT 氏名 FROM 名簿4; テーブル名は実際の名前にしてくださいね。 (以下、上記の仮のテーブル名で説明します。) 2.これをテーブル作成クエリにして実行します。 テーブルの名前は、「氏名マスター」とします。 これを開いて、すべての名前を含まれいてることを確認ください。 このテーブルにオートナンバー型のフィールドを追加して、名前を「氏名ID」とします。 3.名簿1 に数値型(長整数型)のフィールドを追加して、名前を「氏名ID」とします。 「氏名」フィールドが主キーでなければ主キーにします。 4.クエリを新規作成しで、「氏名マスター」「名簿1」を追加します。「氏名」同士で結合します。 更新クエリにして、下記のように設定します。 フィールド 氏名ID テーブル 名簿1 レコードの更新 [氏名マスター].[氏名ID] このクエリを実行します。顧客1に正しく氏名IDが入力されていることを確認ください。 顧客1をデザインビューにして、「氏名ID」を主キーにしてください。 「氏名」フィールドは不要なので削除してください。 5.同様の操作を、名簿2、名簿3、名簿4 にもして、「氏名ID」を追加して主キーにしてください。 6.クエリを新規作成して、氏名マスター、名簿1、名簿2、名簿3、名簿4 を追加します。 氏名マスターと名簿1を「氏名ID」で結合します。 結合線をダブルクリックして結合プロパティを表示させて、「氏名マスターの全レコードと・・・含める」というオプションを選択します。 7.名簿2、名簿3、名簿4に対しても同様に結合させます。 8.氏名マスターからは 氏名ID, 氏名 を表示させ、他のテーブルからは、氏名ID 以外のフィールドを表示させます。 9.このクエリをフォームのレコードソースに設定します。これで、4つのテーブルの内容を同時に表示させて、入力できるようになります。 念のために上記の操作はバックアップをとってから行ってください。

hasegawa-t
質問者

補足

度々ありがとうございます。 >2.これをテーブル作成クエリにして実行します。 テーブルの名前は、「氏名マスター」とします。 この際、 「クエリには、出力フィールドが1つ以上必要です。」と表示されできません。 なお、クエリはできました。すべての名前を含まれていました。 クエリをテーブルにする方法を教えて下さい。宜しくお願いします。

その他の回答 (5)

回答No.6

INSERT INTO 名簿X SELECT * FROM (SELECT "名簿1" AS テーブル名, * FROM 名簿1 UNION SELECT "名簿2" AS テーブル名, * FROM 名簿2) このSQL文の実行結果は添付図のようです。 INSERT INTO tableName1 SELET * FROM tableName2 これが一般的なINSERT文です。この tableName2 の部分を(ユニオンクエリ文)と書く事もできます。

hasegawa-t
質問者

お礼

ありがとうございます。

回答No.5

> できたクエリにデータシートビューとSQLビューはあるのですが、デザインビュウーが無いのです。それで、テーブル作成ができません。 クエリを新規作成して、上記のできたクエリを追加します。そのクエリをテーブル作成クエリにして、実行してください。

hasegawa-t
質問者

お礼

ありがとうございます。出来ました。

回答No.4

> 「クエリには、出力フィールドが1つ以上必要です。」と表示されできません。 > なお、クエリはできました。すべての名前を含まれていました。 > クエリをテーブルにする方法を教えて下さい。宜しくお願いします。 テーブル作成クエリの作り方は下記を参考にしてください。 Access 2010:テーブル作成クエリを作成するには http://www.wanichan.com/pc/access/2010/5/06.html

hasegawa-t
質問者

補足

お世話になります。 できたクエリにデータシートビューとSQLビューはあるのですが、デザインビュウーが無いのです。それで、テーブル作成ができません。 作成方法をご指導願います。

回答No.3

SELECT "名簿1" AS テーブル名, * FROM 名簿1 UNION SELECT "名簿2" AS テーブル名, * FROM 名簿2; これで、もれなく抽出できると思います。

hasegawa-t
質問者

補足

ありがとうございます。出来ました。 各テーブルにフィールド名「メモ」、データ型/短いテキストがあるのですが、これも表示するにはどうしたらよいでしょうか。ご指導願います。

回答No.1

1、この4つのテーブルを同時に入力できる分割フォームをつくりたい。 2、その際の、4つテーブルの氏名をリレーションシップで結合したい。 それぞれに同時に入力する4つのフォームを作るのであれば、別に、リレーション云々は関係ないかと・・・。それに、名簿の列[氏名]はリレーションを設定するには不適。同姓同名もありえますから・・・。

関連するQ&A

  • アクセスのリレーションシップとクエリ

    私は、アクセスの初心者です。なので、難しいことはよく分からないのですが、アクセスではある1つのフィールドをキーにしてくっつけたりすることができるじゃないですか?そのキーを設定したりするのはリレーションシップでも、クエリでも同じような感じで行うと思うのですが、その2つの違いはクエリはそれをテーブルとして表示できるのに対して、リレーションシップはただ定義するしかできずテーブルとして表示はできないのでしょうか? あと、クエリとかである条件で抽出したテーブルの1つのフィールドのSUMを出したいのですがどういった条件式を書けばいいのでしょうか? なにぶん、初心者ゆえに質問が分かりにくいと思いますが、どうかよろしくお願いします。

  • Access2013テーブル結合クエリ

    Access2013 住所録テーブルと面談備忘録テーブルを、氏名で結合したクエリを作成したいのですが。 この二つのテーブルの氏名が重なり合わないものもあります。 この際、重なり合わない氏名などもクエリのデータシートビューに表示させる方法を教えてください。 フィールドの抽出条件になにか記入するのかなと思っています。初心者です。 宜しくお願いします。

  • Access(リレーションシップについて) 

     Win XP Office 2003 Accessを勉強中です。  デザインビューでクエリを作成するときに、関連するテーブルを表示させると自動的に「結合プロパティ」の線が表示されますが、 この表示で自動的に「1対多」を表示する時としない時がありますが、これは何故でしょうか。  これはどこかから設定をしてやるのでしょうか。  また、同じような線としてメニュバーから「リレーションシップ」を表示させることが出来ますが、 内容的には「結合プロパティ」と同じものですが、これは「リレーションシップ」とはどのようなに使い分けるものでしょうか。

  • 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[β]、顧客氏名["空欄"]、得意先[△△金融] 説明下手ですいませんが、ご教授の程よろしくお願いします。

  • Access 分割したテーブルを一対一で結合。新規レコードが作れなくなりました

    過去に同様の質問が無かったようなので質問します。 Access2002です。 これまで顧客名簿を一つのテーブルで管理していたのですが、フィールド数が増えてきたので、 テーブルを5分割しました。 主テーブルに対し副テーブル4つを、主テーブルのID(主キー、オートナンバー型)と副テーブルそれぞれのID(数値型)で一対一結合しています。 下記のようなイメージです。 テーブルA-テーブルB テーブルA-テーブルC テーブルA-テーブルD テーブルA-テーブルE すると、 新規レコードの登録が出来なくなってしまいました。 全部のテーブルを結合させたクエリを作って、そのクエリを基にフォームを作ったり、 主テーブルのフォームに副テーブルのサブフォームを4つ設置したり、 幾つか方法を試みたのですが、どれも同じエラーメッセージが出ます。 ↓ 「インデックス、主キー、またはリレーションシップで値が重複しているので、テーブルを変更できませんでした。重複する値のあるフィールドの値を変更するか、インデックスを削除してください。または重複する値を使用できるように再定義してください。」 非常に基本的な質問なのかも知れませんが、お手上げです。 どなたかご教授くだされば幸いです・・・。

  • アクセス2000でクエリを組んだのですが。。。

    こんにちわ。アクセス初心者です。まず順に追って説明します。 (1)15000件ある顧客名簿と1500件ある担当会社のテーブルをリレーションで結び、クエリを組みました。「Q_顧客名簿」と名づけました。その時点で15000件データが存在します。 (2)フォーム「Q_顧客名簿」を元にフォームを作成しました。そして氏名の曖昧検索をしたいのでまずフォームのテキストボックスに「氏名検索」と名づけて、クエリの画面に戻り「Q_顧客名簿」を元に新たなクエリを組み、「氏名」のフィールドの抽出方法に以下のような文を入れました。 『Like "*" & [forms]![集合フォーム_1]![氏名検索] & "*"』 このクエリを「Q_氏名検索」と名づけました。 (3)フォームの左端をに「Q_氏名検索」が生きるよう設定をし、「氏名検索」のテキストボックスに「再クエリ」を組んだのですが、顧客データ数が15000あるはずなのが11000まで減ってしまいました。 おそらく検索式に何かが足りないのだと思うのですが、SQLやVBAがわからないのでどうすればいいかわかりません。 アクセスの詳しい方、教えていただけませんでしょうか?よろしくお願いいたします。

  • アクセスリレーションシップについて

    こんにちは。 リレーションシップでテーブルとクエリをつないでいます。テーブルは5つあり、その中から例えば名前を入れて検索を掛けると、その5つのテーブルから該当するものを抽出したいのですが、どのようにしたらいいでしょうか?? 一応テーブルをす繋げるところまでは出来ていますので、検索して抽出をかける方法を教えて頂ければと思います。 説明が不十分かもしれませんが、ご教授願います!

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

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

  • マイクロソフト アクセス リレーションシップの扱い方について

    よろしくお願いします。アクセスで作成したテーブル、例えばAとBには共通の番号があります。それぞれは各テーブル内で番号がいくつか重複しています。この番号により、リレーションシップの関連付け(参照整合性は行わず)を行った後、クエリで抽出したところ、ところどころ同じデータが発生して、膨大な量になってしまいます。参照整合性・フィールドの連鎖更新・レコードの連座削除をチェックして再度リレーションシップを作成しましたが、主テーブルで参照されている固有のインデックスが見つからないとのエラーメッセージが出ます。このテーブルA・Bを使用してデータが重複しないようにクエリで抽出する事はできますか。

  • リレーションシップがたくさんついているクエリ同士だと、不一致クエリを作

    リレーションシップがたくさんついているクエリ同士だと、不一致クエリを作成することはできないのでしょうか? 不一致クエリにしたい二つのクエリのみ別のフォームで作成し直して、不一致クエリを作成すると、抽出してくれたのですが、もともとのリレーションシップがついているクエリのままだと抽出が0になってしまいます。 フィールドやデザインは全く同じなのですが、やはりリレーションシップのせいでしょうか?

専門家に質問してみよう