在MS Access中以2×2的形式在三个字段中查找重复项

时间:2018-02-18 21:09:20

标签: sql duplicates ms-access-2010

在Access 2010中,我希望从3个字段中的一个表中找到重复项,但是需要按字段对或两个字节。基本上,副本要么具有:
- 相同的姓氏和相同的姓氏
OR
- 相同的名字和相同的出生日期

例如,我的表是:

   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查询向导查找重复项,然后逐步创建每个对的查询。但是,当我创建第三个查询以获取所有结果时,该表将永远加载(我的表有3000多条记录)。所以,前两个查询似乎没有任何帮助。

我还创建了一个连接字段对的查询,认为通过减少两个字段而不是三个字段的搜索会有所帮助,但我只会收到错误。
我想我不能依赖向导而且我必须使用SQL,但我对它不太满意。

我应该怎么做?

非常感谢!

2 个答案:

答案 0 :(得分:1)

这个逻辑应该做你想要的:

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)
      );

答案 1 :(得分:0)

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

  • 出生日期相同,姓氏相同,名字相同(没有提及,我的不好)
  • 出生日期相同,姓氏相同
  • 出生日期相同,名字相同

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

这是:(对我这样的假人:你需要替换&#34; tablename&#34;用你的桌子名称并使用足够的字段名称,这就是全部)

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);

首先,我在t1.ID <> t2.ID子句中添加了ON AND,但戈登是对的:Access不是那样的,因此无法使用设计视图。< / p>

我不知道我是否应该使用GROUP BY和HAVING计数而不是自我加入,我想这是一种可能性,但它按原样运行,所以......

再次感谢你,戈登!