在 MS Access 中两两查找三个字段中的重复项

Find duplicates in three fields two-by-two in MS Access

在 Access 2010 中,我想从一个 table 的 3 个字段中查找重复项,但要按字段对或两个字段两个字段查找。基本上,重复项要么有:
- 相同的姓氏和相同的出生日期
或者
- 相同的 名字 和相同的 出生日期

例如,我的 table 是:

   Last name           First name          DoB

   Brook               Felicity            05/01/1970
   Carlson             Roxane              11/23/1983
   Brook               Felicity Joan       05/01/1970
   Carlson Winfield    Roxane              11/23/1983
   Ackerman            Randall             11/23/1983

查询结果应该会找到除最后一条(出生日期相同但姓名唯一)以外的所有记录。

我所做的是使用 Access 查询向导查找重复项,一步一步地为每一对创建一个查询。但是,当我创建第三个查询以获取所有结果时,table 需要永远加载(我的 table 有 3000 多条记录)。因此,前两个查询似乎根本没有帮助。

我还创建了一个查询来连接成对的字段,认为减少两个字段而不是三个字段的搜索会有所帮助,但我只遇到错误。
我想我不能依赖向导,我必须使用 SQL,但我不太习惯 table。

我该怎么办?

非常感谢!

此逻辑应该符合您的要求:

select t1.*, t2.*
from t as t1 inner join
     t as t2
     on t1.dateofbirth = t2.dateofbirth and
        ( (t1.lastname = t2.lastname and t1.firstname <> t2.firstname) or
           (t1.firstname = t2.firstname and t1.lastname <> t2.lastname)
        );

MS Access 对 on 子句中的内容有一些奇怪的规定。您可能需要将其写为:

select t1.*, t2.*
from t as t1 inner join
     t as t2
     on t1.dateofbirth = t2.dateofbirth
where ( (t1.lastname = t2.lastname and t1.firstname <> t2.firstname) or
        (t1.firstname = t2.firstname and t1.lastname <> t2.lastname)
      );

感谢 Gordon 的回答,我找到了一个解决方案来查询所有这些重复项:

  • 相同的出生日期,相同的姓氏,相同的名字(没提,我的错)
  • 出生日期相同,姓氏相同
  • 出生日期相同,名字相同

我只是使用了我的 ID 字段,所以我猜这是需要的。

在这里 :(像我这样的傻瓜:你需要用你的 table 的名称替换 "tablename" 并使用足够的字段名称,仅此而已)

SELECT DISTINCT t1.*
FROM Tablename AS t1 
INNER JOIN Tablename AS t2 
ON t1.dateofbirth  = t2.dateofbirth 
WHERE t1.ID <> t2.ID 
AND (t1.lastname = t2.lastname OR t1.firstname = t2.firstname);

起初我在 ON 子句中添加了 t1.ID <> t2.IDAND 但 Gordon 是对的:Access 不喜欢这样,因此无法使用设计视图。

我不知道我是否应该使用 GROUP BY 和 HAVING 计数而不是自连接,我想这是可能的,但它按原样工作,所以...

再次感谢你,戈登!