場合によっては、 Access 内の 2 つのテーブルを比較し、他のテーブルに対応するレコードがないテーブルの 1 つのレコードを識別したい場合があります。 これらのレコードを識別する最も簡単な方法は、不一致クエリ ウィザードを使用することです。 ウィザードでクエリを作成後、クエリのデザインを変更してフィールドを追加または削除したり、2 つのテーブル間に結合を追加して値が一致するフィールドを示したりすることができます。 ウィザードを使用せず、独自のクエリを作成して不一致のレコードを検索することもできます。
この記事では、不一致クエリ ウィザードを開始および実行する方法、ウィザードの出力を変更する方法、不一致のレコードを検索する独自のクエリを作成する方法について紹介します。
この記事の内容
どのようなときに不一致のレコードを検索しますか。
2 つのテーブルを比較し、不一致のレコードを検索する一般的な状況を、以下に 2 つ示します。 状況によっては、最初の手順で不一致のレコードを検索する場合があります。 この記事では、不一致のレコードを検索する方法のみについて説明します。
-
1 つのテーブルに任意の物品 (製品など) についてのデータを格納し、別のテーブルにそれに関連するアクションについてのデータ (受注など) を格納する場合。
たとえば、ノースウィンド データベース テンプレートでは、商品についてのデータは "商品" テーブルに格納され、各受注に含まれる商品についてのデータは "受注明細" テーブルに格納されます。 仕様により "商品" テーブルには受注についてのデータがないため、"商品" テーブルのみを参照しても、販売されたことのない商品を判別できません。 また、"受注明細" テーブルには販売された製品のデータのみが含まれるため、販売されたことのない商品の情報は、"受注明細" テーブルのみを参照しても判別できません。 販売されたことのない商品を判別するには、2 つのテーブルを比較する必要があります。
1 つ目のテーブルに含まれるものの一覧を参照して、2 つ目のテーブルに対応するアクションが存在しないことを確認したい場合、不一致クエリを使用することができます。
-
重複、冗長、または競合する情報を含んだ 2 つのテーブルを、1 つのテーブルに統合する必要がある場合。
たとえば、"得意先" という 1 つのテーブルおよび "顧客" という別のテーブルがあるとします。 これらのテーブルはほとんど同じですが、一方のテーブルまたは両方のテーブルには、他方にはないレコードがいくつか含まれています。 これらのテーブルを統合するには、まずどのレコードが、一方のテーブルまたは他方のテーブルで一意になっているのかを判別する必要があります。
このような状況では、この記事で説明する方法が役に立ちますが、さらに追加の手順が必要な場合があります。 不一致クエリ ウィザードを実行すると不一致のレコードを識別できますが、レコードを結合したセットを取得するには、ウィザードの結果を使用してユニオン クエリを作成します。 構造化照会言語 (SQL) ステートメントの記述に慣れている場合は、不一致クエリ ウィザードを使用せずに、手動でユニオン クエリを記述してもかまいません。
重複、冗長、または競合する情報の問題は、複数のテーブルに重複するデータを確認することで対処できる場合があります。
ユニオン クエリ、または重複するデータの検索、非表示、あるいは除去の詳細については、「参照」セクションのリンクをクリックしてください。
注: この記事の例では、ノースウィンド データベース テンプレートを使用して作成されたデータベースを使用します。
ノースウィンドのセットアップ方法
-
[ファイル] タブの [新規] をクリックします。
-
使用している Access のバージョンによっては、検索ボックスまたは左側のウィンドウでノースウィンドを検索することができます。[テンプレート カテゴリ] で [ローカル テンプレート] をクリックします。
-
[ローカル テンプレート] で [ノースウィンド 2007 サンプル] をクリックしてから、[作成] をクリックします。
-
Northwind Traders のページ ([スタートアップ画面] オブジェクト タブ) の指示に従ってデータベースを開き、[ログイン ダイアログ] ウィンドウを閉じます。
不一致クエリ ウィザードを使用して 2 つのテーブルを比較する
-
[作成] タブの [クエリ] グループで [クエリ ウィザード] をクリックします。
-
[新しいクエリ] ダイアログ ボックスの [不一致クエリ ウィザード] をダブルクリックします。
-
ウィザードの最初のページで、不一致のレコードのあるテーブルをクリックし、[次へ] をクリックします。 たとえば、販売されたことがないノースウィンドの商品の一覧を表示するには、[商品] テーブルをクリックします。
-
2 番目のページで、関連するテーブルをクリックし、[次へ] をクリックします。 この例の場合は、[受注明細] テーブルをクリックします。
-
3 番目のページで、テーブルを関連付けるフィールドを選択し、[< = >] をクリックして、[次へ] をクリックします。 テーブルごとに 1 つのフィールドのみを選択できます。 この例の場合は、"商品" テーブルの [ID] および "受注明細" テーブルの [商品 ID] を選択します。 [関連付けるフィールド] ボックスのテキストを見て、正しいフィールドが組み合わされていることを確認します。
既存のリレーションシップがテンプレートに組み込まれているため、[ID] フィールドおよび [商品 ID] フィールドは既に選択されている場合があります。
-
4 番目のページで、確認する 1 つ目のテーブルのフィールドをダブルクリックし、[次へ] をクリックします。 この例の場合は、[ID] フィールドおよび [商品名] フィールドをクリックします。
-
5 番目のページで、結果を表示するか、クエリのデザインを変更するかを選択できます。 この例では、[クエリを実行して結果を表示する] をオンにします。 表示されたクエリ名を使用して、[完了] をクリックします。
クエリのデザインを変更して、他の条件を追加したり、並べ替え順序を変更したり、フィールドを追加または削除したりできます。 一致しない検索クエリの変更については、次のセクションを参照してください。または、クエリの作成と変更に関する一般的な情報については、「 関連項目」 セクションのリンクを参照してください。
不一致クエリを作成、変更して複数フィールドを比較する
-
[作成] タブの [クエリ] グループで [クエリ ウィザード] をクリックします。
-
[新しいクエリ] ダイアログ ボックスの [不一致クエリ ウィザード] をダブルクリックします。
-
ウィザードの最初のページで、不一致のレコードのあるテーブルをクリックし、[次へ] をクリックします。 たとえば、販売されたことがないノースウィンドの商品の一覧を表示するには、[商品] テーブルをクリックします。
-
2 番目のページで、関連するテーブルをクリックし、[次へ] をクリックします。 この例の場合は、[受注明細] テーブルをクリックします。
-
3 番目のページで、テーブルを関連付けるフィールドを選択し、[< = >] をクリックして、[次へ] をクリックします。 テーブルごとに 1 つのフィールドのみを選択できます。 この例の場合は、"商品" テーブルの [ID] および "受注明細" テーブルの [商品 ID] を選択します。 [関連付けるフィールド] ボックスのテキストを見て、正しいフィールドが組み合わされていることを確認します。 ウィザードを完了した後に、残りのフィールドを結合できます。
既存のリレーションシップがテンプレートに組み込まれているため、[ID] フィールドおよび [商品 ID] フィールドは既に選択されている場合があります。
-
4 番目のページで、確認する 1 つ目のテーブルのフィールドをダブルクリックし、[次へ] をクリックします。 この例の場合は、[ID] フィールドおよび [商品名] フィールドをクリックします。
-
5 番目のページで、[クエリのデザインを編集する] をクリックし、[完了] をクリックします。
デザイン ビューにクエリが開きます。
-
クエリのデザイン グリッドで、ウィザードの 3 番目のページで指定したフィールド (この例では ID と製品 ID) によって、2 つのテーブルが結合されていることを確認します。 関連するフィールドの残りのペアごとに、1 つ目のテーブル (不一致のレコードがあるテーブル) から 2 つ目のテーブルにフィールドをドラッグして、結合を作成します。 たとえば、"商品" テーブルの [表示価格] フィールドを "受注明細" テーブルの [単価] フィールドにドラッグします。
-
結合 (フィールドを結んでいる線) をダブルクリックして、[結合プロパティ] ダイアログ ボックスを開きます。 結合ごとに、"商品" テーブルの全レコードを含めるオプションを選択し、[OK] をクリックします。
クエリのデザイン グリッドで、各結合の終端に矢印があることを確認します。
1. "表示価格" フィールドと "単価" フィールドとの間に結合を作成すると、両方のテーブルの出力が制限されます。 両方のテーブルに一致するデータがあるレコードのみが、クエリ結果に含まれます。
2. 結合プロパティを編集すると、矢印が指すテーブルのみが結合によって制限されます。 矢印の元のテーブルのレコードは、すべてクエリ結果に含まれます。
注: 結合の矢印は、すべて同じ方向を指すようにしてください。
-
関連するレコードがあるテーブル (この例では、"受注明細" テーブル) 内の、1 つ目のテーブルに結合されているフィールドのうち、ウィザードの 3 番目のページで選択したフィールド (この場合、"商品 ID" フィールド) を除く各フィールドをダブルクリックします。 これらのフィールドごとに、[表示] 行のチェック ボックスをオフにし、[抽出条件] 行に「Is Null」と入力します。
-
オプションで、他のクエリ フィールドに抽出条件を追加するか、1 つ目のテーブルの値に基づく集計フィールドを作成します。
-
[ クエリ デザイン ] タブの [ 結果 ] グループで、[ 実行] をクリックします。
クエリによって、既存の受注に含まれていない商品の名前が返されます。
独自のクエリを作成して不一致のレコードを検索する
-
[作成] タブの [クエリ] グループで [クエリ デザイン] をクリックします。
-
一致しないレコードがあるテーブルをダブルクリックし、関連するレコードがあるテーブルをダブルクリックします。
-
クエリのデザイン グリッドで、2 つのテーブルの関連するフィールドを結ぶ、結合と呼ばれる線があることを確認します。 結合がない場合は、1 つ目のテーブル (不一致のレコードがあるテーブル) の関連する各フィールドを 2 つ目のテーブル (関連するレコードがあるテーブル) にドラッグして作成します。
-
結合をダブルクリックして [結合プロパティ] ダイアログ ボックスを開きます。 結合ごとに、オプション [2] をオンにし、[OK] をクリックします。
クエリのデザイン グリッドで、結合が変化し、終端に矢印ができることを確認します。
注: 結合は、すべて同じ方向を指すようにしてください。 結合が異なる方向を指しているとクエリは実行されず、結合が矢印でない場合も実行されないことがあります。 結合は、不一致のレコードがあるテーブルから出ている必要があります。
-
不一致のレコードがあるテーブルで、クエリで返すフィールドをダブルクリックします。
オプションで、これらの任意のフィールドの抽出条件を入力するか、集計フィールドを作成します。
-
関連するレコードがあるテーブルで、1 つ目のテーブルに結合されている各フィールドをダブルクリックします。 これらのフィールドごとに、[表示] 行のチェック ボックスをオフにし、[抽出条件] 行に「Is Null」と入力します。
-
[ クエリ デザイン ] タブの [ 結果 ] グループで、[ 実行] をクリックします。