このような場合、私はクエリを個々の「基本クエリ」に分割して保存することを好む傾向があります。次に、「基本クエリ」に基づいて「結果クエリ」を作成します。この場合、3つのマッチング方法の「基本クエリ」を作成することから始めます。
[qry_base_1_matchFirstLastEmail]:
SELECT DISTINCT TableA.[Contact ID], TableB.[UIR No]
FROM TableA INNER JOIN TableB ON (TableA.Email = TableB.Email) AND (TableA.[Last Name] = TableB.[Last Name]) AND (TableA.[First Name] = TableB.[First Name]);
[qry_base_2_matchFirstEmail]:
SELECT DISTINCT TableA.[Contact ID], TableB.[UIR No]
FROM TableA INNER JOIN TableB ON (TableA.Email = TableB.Email) AND (TableA.[First Name] = TableB.[First Name]);
[qry_base_3_matchLastEmail]:
SELECT DISTINCT TableA.[Contact ID], TableB.[UIR No]
FROM TableA INNER JOIN TableB ON (TableA.[Last Name] = TableB.[Last Name]) AND (TableA.Email = TableB.Email);
次に、これらを「結果クエリ」のソースとして使用できます。ここで、ステップ(2)はステップ(1)の結果を省略し、ステップ(3)は(2)と(1)の両方の結果を省略します。
ステップ1:[名]、[姓]、[メール]を照合します
これはすでに「基本クエリ」の1つとして使用されているため、単に名前qry_base_1_matchFirstLastEmail
を変更するqry_result_1_matchOnlyFirstLastEmail
か(混乱を招く可能性があります)、qry_result_1_matchOnlyFirstLastEmail
結果を返すだけの新しいものを作成するかqry_base_1_matchFirstLastEmail
(少し非効率的です)を選択する必要があります。混乱しやすいので、2番目のオプションを選択します
[qry_result_1_matchOnlyFirstLastEmail]:
SELECT qry_base_1_matchFirstLastEmail.*
FROM qry_base_1_matchFirstLastEmail;
ステップ2: [名]と[メール]だけを一致させる
ステップ1ですでに特定した結果を取得してqry_base_2_matchFirstEmail
削除します。
[qry_result_2_matchOnlyFirstEmail]:
SELECT qry_base_2_matchFirstEmail.[Contact ID], qry_base_2_matchFirstEmail.[UIR No]
FROM qry_base_2_matchFirstEmail LEFT JOIN qry_base_1_matchFirstLastEmail ON (qry_base_2_matchFirstEmail.[UIR No] = qry_base_1_matchFirstLastEmail.[UIR No]) AND (qry_base_2_matchFirstEmail.[Contact ID] = qry_base_1_matchFirstLastEmail.[Contact ID])
WHERE (((qry_base_1_matchFirstLastEmail.[Contact ID]) Is Null) AND ((qry_base_1_matchFirstLastEmail.[UIR No]) Is Null));
ステップ3: [名前]と[メール]だけを一致させる
手順1と2ですでに特定した結果を取得しqry_base_3_matchLastEmail
、削除します。
[qry_result_3_matchOnlyLastEmail]:
SELECT qry_base_3_matchLastEmail.[Contact ID], qry_base_3_matchLastEmail.[UIR No]
FROM (qry_base_3_matchLastEmail LEFT JOIN qry_base_2_matchFirstEmail ON (qry_base_3_matchLastEmail.[UIR No] = qry_base_2_matchFirstEmail.[UIR No]) AND (qry_base_3_matchLastEmail.[Contact ID] = qry_base_2_matchFirstEmail.[Contact ID])) LEFT JOIN qry_base_1_matchFirstLastEmail ON (qry_base_3_matchLastEmail.[UIR No] = qry_base_1_matchFirstLastEmail.[UIR No]) AND (qry_base_3_matchLastEmail.[Contact ID] = qry_base_1_matchFirstLastEmail.[Contact ID])
WHERE (((qry_base_2_matchFirstEmail.[Contact ID]) Is Null) AND ((qry_base_2_matchFirstEmail.[UIR No]) Is Null) AND ((qry_base_1_matchFirstLastEmail.[Contact ID]) Is Null) AND ((qry_base_1_matchFirstLastEmail.[UIR No]) Is Null));
(最後のものは少し怖いように見えるかもしれませんが、SQLをAccessクエリデザイナに貼り付けると、それが本当に恐れることは何もないことがわかります。)