• ベストアンサー

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

専門家に質問してみよう