在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,但我对它不太满意。
我应该怎么做?
非常感谢!
答案 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计数而不是自我加入,我想这是一种可能性,但它按原样运行,所以......
再次感谢你,戈登!