Accessで2つのテーブルがあって、1つのテーブルの複数のフィールドが、別テーブルの同じフィールドへ結合する場合のクエリの作成方法です。
例えば、社員テーブルと商品テーブルがあって、商品テーブルに開発担当者と販売担当者が設定されていて、開発担当者と販売担当者は、同じ社員マスターテーブルを参照するような場合です。
社員テーブルのフィールドを結合すればいいのですが、商品テーブルの複数フィールドを社員テーブルの1つのフィールドへ結合するとうまくいきません。
クエリのデザインビューに同じ社員テーブルを追加して、それぞれに結合します。
参考ここでのウィンドウは、[タブ付きドキュメント](既定)の設定にしています。[ウィンドウを重ねて表示する]と[タブ付きドキュメント]の違いについては、以下の記事で解説しています。
-
[タブ付きドキュメント]と[ウィンドウを重ねて表示する]の違い
Access2007以降、オブジェクトを表示すると、タブ付きウィンドウで表示されるようになっています。 昔からAccessを使用している方に ...
2つのテーブルの確認
テーブル[T_社員]は、以下のように設定しています。
デザインビューとデータシートビューです。
テーブル[T_商品]は、以下のように設定しています。[開発担当ID]と[販売担当ID]が空白になっているレコードもあるテーブルです。
デザインビューとデータシートビューです。
クエリの作成
2つのテーブルを結合させたクエリを作成します。
クエリのデザインビューで2つのテーブルを追加して、テーブル[T_商品]リストの[開発担当ID]と[販売担当ID]をテーブル[T_社員]リストの[社員ID]フィールドを結合します。
結合プロパティで設定
結合線をダブルクリックして、[結合プロパティ]を表示して、設定を変更します。
['T_商品'の全レコードと'T_社員'の同じ結合フィールドだけを含める。]を選択して[OK]ボタンをクリックします。
2つの結合プロパティで設定します。結合線は、以下のようになります。
そして、クエリを実行すると、以下のようになります。
でも、[氏名]は表示されていません。[Expr]は同じフィールドが複数ある場合に表示されるものです。
これは、求めている結果ではありませんね。
参考エラーが出る場合があります。
2つの結合プロパティが異なる場合、以下のようなエラーメッセージが表示されます。すべての結合プロパティを確認してみてください。
あいまいな外部結合が含まれているので、SQLステートメントを実行できません。いずれかの結合を最初に実行するために、第一次結合を実行する分割クエリを作成し、SQLステートメントにそのクエリを含めてください。
テーブル[T_社員]を追加して結合
こういう場合は、クエリのデザインビューに同じ社員テーブルを追加して、別々にフィールドを結合します。
[販売担当ID]と[社員ID]の結合は削除します。
そして、右クリックしてショートカットメニューから[テーブルの表示]をクリックして、テーブル[T_ 社員]を追加します。
[T_社員_1]リストが追加されます。テーブルリストの名前は自動的にお尻に[_1]がつきます。
そして、[販売担当ID]と[T_社員_1]の[社員ID]を結合します。
結合線をダブルクリックして、結合プロパティを開いて['T_商品'の全レコードと'T_社員'の同じ結合フィールドだけを含める。]を選択して[OK]ボタンをクリックします。
結合線の向きで確認できると思います。
デザイングリッドの[販売担当ID]の右隣の[氏名]フィールドのテーブルを[T_社員_1]に変更します。
クエリを実行すると、以下のようになります。求めたい結果が表示されるようになります。
参考バージョンによって異なると思いますが、クエリのデザインビューで[テーブルの追加]やショートカットメニューから[テーブルの表示]をクリックすると、Microsoft 365のAccessとAccess 2021では[テーブルの追加]作業ウィンドウとして表示されます。
クエリデザインの「テーブルの追加」は作業ウィンドウに表示される
参照整合性を設定した後にクエリを作成する場合
リレーションシップを先に作成している場合もあると思います。
以下のように参照整合性を設定しています。
リレーションシップも、同じマスターテーブル[T_社員]を追加して設定します。
それぞれ以下のように参照整合性をオンに設定しています。
参考リレーションシップについては、以下の記事で解説しています。
-
リレーションシップの作成と参照整合性の設定
Accessでは、複数のテーブルがあって、そのテーブル間の共通フィールドを関連付けることができます。この関連付けのことを[リレーションシップ ...
クエリを作成
リレーションシップを設定した後、クエリを作成すると以下のように自動的に結合線が設定されます。
しかし、このままでは、レコードは表示されません。
クエリを編集
この場合も同じように、テーブル[T_社員]を追加して、結合線を設定し直します。
結合線は、以下のようになりますが、これでOKです。
クエリを実行すると、以下のようになります。
参考結合プロパティについては、以下の記事も参考になると思います。
-
2つのテーブルの共通フィールドを比較して一方にしかないデータを抽出する
2つのテーブルの共通フィールドを比較して、一方のテーブルにしかないレコードを抽出する方法です。 例えば、製品テーブルと売上テーブルがあって、 ...
-
2つのテーブルの差分を求める(不一致クエリウィザード)
Accessで2つのテーブルの不一致レコードを抽出する方法です。 下のように[テーブルA]と[テーブルB]があります。2つのテーブルのうち、 ...