在这种情况下,我倾向于将查询分解为单独的“基本查询”并保存它们。然后我根据“基本查询”创建“结果查询”。在这种情况下,我将首先为三种匹配方式创建“基本查询”:
[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 步:匹配 [First Name]、[Last Name] 和 [Email]
我们已经将它作为我们的“基本查询”之一,因此我们必须在简单地重命名qry_base_1_matchFirstLastEmail
为qry_result_1_matchOnlyFirstLastEmail
(这可能会令人困惑)或创建一个qry_result_1_matchOnlyFirstLastEmail
简单地从其返回结果qry_base_1_matchFirstLastEmail
(这有点低效)之间做出选择。我很容易混淆,所以我会选择第二个选项
[qry_result_1_matchOnlyFirstLastEmail]:
SELECT qry_base_1_matchFirstLastEmail.*
FROM qry_base_1_matchFirstLastEmail;
第 2 步:仅匹配[First Name] 和 [Email]
我们希望从qry_base_2_matchFirstEmail
步骤 1 中已经确定的结果中提取并消除结果:
[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 步:仅匹配[姓氏] 和 [电子邮件]
我们希望从qry_base_3_matchLastEmail
步骤 1 和步骤 2 中已经确定的结果中提取并消除结果:
[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 查询设计器中,您会发现它真的没什么好害怕的。)