• 締切済み

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

みんなの回答

  • layy
  • ベストアンサー率23% (292/1222)
回答No.2

クエリで項目の値を取得する際、DLOOKUP関数を使うというのはどうでしょう。テーブル2からの顧客ID取得等に使えたらと思います。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

一つのクエリで出来るかどうかは・・・わかりません。 以下のようなことは思いつきますが。 (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 についてまとめて並び替えれば必要なデータ がでてきます。 このようなところですが。