演習
互いに直接的なリレーションシップを持たないデータ ソースから情報を抽出するクエリを作成することが必要な場合があります。
中間テーブルを使用して、クエリでデータ ソースを接続する
クエリを実行すると、テーブル間に作成済みのリレーションシップが使用され、さらに他のデータ ソース間の接続が推測および作成されます。 クエリで必要なリレーションシップが存在しない場合は、そのクエリの一部としてテーブル同士を接続します。
さまざまなサプライヤーから仕入れた製品に対する受注数を確認すると仮定します。 "サプライヤー" テーブルは、製品 ID と数量情報が含まれている "発注書明細表" テーブルに接続されていません。 ただし、"発注書" テーブルは、"発注書明細表" テーブルに接続されています。
ヒント: このリレーションシップが、作成中のクエリの外部で必要となる可能性がる場合は、後で使用できるように中間リレーションシップを作成することをお勧めします。 作成方法については、「Create many-to-many relationships」 (多対多リレーションシップの作成) を参照してください。
データベース内に中間テーブルを作成したくない場合は、"発注書" テーブルをクエリ内で中間テーブルとして使用します。 "発注書" テーブルを "サプライヤー" テーブルの左側に追加して、接続を作成します。
"発注書" テーブルにより、"サプライヤー" テーブルと "発注書明細表" テーブルの 2 つの異なるテーブルが接続されます。 次の抽出条件を満足するフィールド ("サプライヤー" テーブルの ID、"発注書" テーブルの "サプライヤー ID" など) を使用してテーブルを接続します。
-
この 2 つのフィールドには、一致するデータ型または互換性のあるデータ型が含まれています。 たとえば、テキスト フィールドを数値フィールドに接続することはできません。
-
フィールドによって、各テーブル内で一致する一意のレコードが識別されます。 たとえば、姓は必ずしも一意であるとは限らないので、2 つの"姓" フィールドを接続するのは好ましくありません。
-
フィールドを使用すると、正しいレコードが確実に結果として得られます。 たとえば、サプライヤー ID を購入 ID に接続すると、ID が似ている場合に一致するものが表示されることがあります。 ただし、サプライヤー ID は購入 ID とは関係がないため、結果は意味がありません。 どちらのフィールドもサプライヤーを識別するため、仕入先テーブルの ID を購買発注テーブルの仕入先 ID に接続することをお勧めします。返されるレコードは意味があります。
手順
データベース内に中間テーブルが存在している場合も、クエリ内で中間テーブルを使用するだけである場合も、次の手順に従います。
-
接続されていない 2 つのテーブル間のクエリに中間テーブルを追加します。
-
中間テーブルを使用して、必要な接続を作成します。
接続では、任意の種類の適切な結合を使用できます。ただし、このモジュールで前述した抽出条件に一致するフィールドを介して接続する必要があります。
-
クエリを実行します。
クエリを作成するための一般的な手順に従い、出力フィールドを追加し、抽出条件を追加し、クエリを実行または保存します。 詳細については、「基本的なクエリの作成」をご覧ください。
注: 結果に中間テーブルを含める必要はありません。 中間テーブルは、Access がデータを接続できるように、クエリのデータ ソースの一部として使用されるにすぎません。