重複クエリウィザードを使わずに重複レコードを抽出する

 重複クエリウィザードは、テーブルやクエリに含まれる1つの、あるいは複数の列に注目して、同じ値を持つレコードをすべて抽出するときに用います。
 とても便利なので重用しますが、ウィザードなしでどうやるかと考えたときの対応を2つ示します。

f:id:accs2014:20180604003726p:plain:right:w500

 なお、例としてこのようなテーブルから「血液型」と「出身地」が両方とも同じである者、つまり両方の値が重複している者を抽出するものとします。

方法1:複数のクエリを作成する方法

f:id:accs2014:20180604020600p:plain:right:w400

 簡単な方法です。
 まずは1つ目のクエリで普通にグループ化を利用し、レコードが2つ以上存在する血液型と出身地の組み合わせを抽出します。


f:id:accs2014:20180604020557p:plain:right:w500

 そして2つ目のクエリです。1つ目のクエリともとのレコードを結合して、あとは表示させる列を適宜選択すればOKです(並び順については方法2の結果と一致するよう調整しています)。


f:id:accs2014:20180604020555p:plain:right:w400

 データシートビューです。
 クエリを2つ作る必要があるとはいえ、重複クエリウィザードの内容を理解するよりはるかに簡単です。


方法2:重複レコードをカウントする列を設ける方法

f:id:accs2014:20180604003714p:plain:right:w500

 こちらはクエリ1個で済む方法です。重複クエリウィザードにより作成されるクエリの内容が理解できれば同じように手動で作成することもできますが、やや難解な気もしますのでこちらでは別の方法を見てみます。
 具体的には、クエリで次のような列を設け、その抽出条件欄に「>1」と記します。


重複人数: (SELECT Count(*) FROM 会員テーブル AS 会員テーブル_1 WHERE 会員テーブル_1.血液型=会員テーブル.血液型 AND 会員テーブル_1.出身地=会員テーブル.出身地)

 サブクエリを使っている点に違いありませんが、考え方としてはこちらの方が素直かと思います。


f:id:accs2014:20180604003808p:plain:right:w500

 データシートビューです。