プロが教える店舗&オフィスのセキュリティ対策術

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 回答 (2件)

一つのクエリで出来るかどうかは・・・わかりません。


以下のようなことは思いつきますが。

(1)
クエリ1は二つの選択クエリをくっつけたユニオンクエリです。
それぞれに無い架空のフィールドを作成しています。したがって、
本来は相容れないフィールドをフィールド名だけ同じにして
います。


クエリ1:

SELECT テーブル2.社員ID, テーブル2.顧客ID, Null AS 得意先ID, テーブル4.顧客氏名, Null AS 得意先
FROM (テーブル1 INNER JOIN テーブル2 ON テーブル1.社員ID = テーブル2.社員ID) INNER JOIN テーブル4 ON テーブル2.顧客ID = テーブル4.顧客ID;
UNION ALL SELECT テーブル3.社員ID, Null AS 顧客ID, テーブル3.得意先ID, Null AS 顧客氏名, テーブル5.得意先
FROM (テーブル1 INNER JOIN テーブル3 ON テーブル1.社員ID = テーブル3.社員ID) INNER JOIN テーブル5 ON テーブル3.得意先ID = テーブル5.得意先ID;


このクエリ1を開くと一人の社員に関する顧客テーブルの情報と
得意先テーブルの情報は分離して表示されます。
これでいいのならばここまでですが、社員IDでまとめる必要
がある場合は、このクエリのデータの性質上テーブルにして
並び替える必要があります。


(2)
このクエリ1を基に選択クエリを作ります。

SELECT クエリ1.社員ID, クエリ1.顧客ID, クエリ1.得意先ID, クエリ1.顧客氏名, クエリ1.得意先
FROM クエリ1;


(3)
このクエリをテーブル作成クエリに変更して
出来たテーブルを社員ID、顧客ID、得意先ID
についてまとめて並び替えれば必要なデータ
がでてきます。

このようなところですが。
    • good
    • 0

クエリで項目の値を取得する際、DLOOKUP関数を使うというのはどうでしょう。

テーブル2からの顧客ID取得等に使えたらと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!