Access 2010中如何按两两字段组合查找单表重复记录
更高效的Access 2010重复记录查询方案
嘿,我来给你一个比用重复查询向导分步操作高效得多的方案——直接用SQL语句一步到位,完全匹配你的重复判定规则!
需求回顾
你需要从单表中筛选出满足以下任一条件的重复记录:
- 姓氏 + 出生日期的组合重复
- 名字 + 出生日期的组合重复
同时排除仅出生日期相同,但姓氏和名字都不重复的记录(也就是你说的最后一条无需查出的情况)
一步到位的SQL查询
把下面的SQL语句复制到Access的查询设计视图(切换到SQL视图),替换YourTableName为你的实际表名即可:
SELECT t.* FROM YourTableName AS t INNER JOIN ( -- 筛选重复的「姓氏+出生日期」组合 SELECT 姓氏, 出生日期 FROM YourTableName GROUP BY 姓氏, 出生日期 HAVING COUNT(*) > 1 UNION -- 筛选重复的「名字+出生日期」组合 SELECT 名字, 出生日期 FROM YourTableName GROUP BY 名字, 出生日期 HAVING COUNT(*) > 1 ) AS dup ON (t.姓氏 = dup.姓氏 AND t.出生日期 = dup.出生日期) OR (t.名字 = dup.名字 AND t.出生日期 = dup.出生日期) ORDER BY t.出生日期, t.姓氏, t.名字;
代码解释
- 子查询部分:
- 第一个SELECT块找出所有「姓氏+出生日期」出现次数大于1的组合
- 第二个SELECT块找出所有「名字+出生日期」出现次数大于1的组合
- 用
UNION合并两个结果,自动去重避免重复组合被多次统计
- 主查询部分:
- 通过
INNER JOIN把原表和子查询的重复组合关联起来,筛选出所有符合条件的记录 - 最后用
ORDER BY把同组重复记录排在一起,方便你查看对比
- 通过
注意事项
- 如果你的字段名包含空格或特殊字符,记得给字段名加上方括号,比如
[姓氏]、[出生日期] - 这个查询会一次性返回所有符合规则的重复记录,比分步创建多个查询再合并的效率高很多,也更容易维护
内容的提问来源于stack exchange,提问作者Zie
相关产品推荐
相关产品推荐

