如何在Microsoft Access中按姓名+手机号去重并保留一条记录?
解决Microsoft Access开发者表重复记录删除问题
问题分析
你的需求是保留**姓名(Name)+手机号(Cell Phone)**唯一的记录,删除其余重复项,但当前SQL存在两个核心问题:
- GROUP BY包含了
Affiliation和Position,只会识别四个字段完全重复的记录,无法覆盖「姓名+手机号相同但机构/职位不同」的场景 - 子查询逻辑会选中所有重复实例,执行删除时会把同组的所有记录全部删掉,而非保留一条
解决方案
前提准备
确保Developer表有唯一主键(比如添加自动编号字段DeveloperID),这是精准区分不同记录的必要条件。
步骤1:先验证要删除的记录
先创建选择查询,确认待删除的记录范围(避免误操作):
SELECT d.* FROM Developer d WHERE d.DeveloperID NOT IN ( -- 每个姓名+手机号组合,保留ID最小的那条(可替换为MAX保留最新记录) SELECT MIN(Tmp.DeveloperID) FROM Developer Tmp GROUP BY Tmp.Name, Tmp.[Cell Phone] )
运行查询后,检查结果是否为你计划删除的重复记录。
步骤2:执行删除操作
确认无误后,将查询修改为删除查询:
DELETE d.* FROM Developer d WHERE d.DeveloperID NOT IN ( SELECT MIN(Tmp.DeveloperID) FROM Developer Tmp GROUP BY Tmp.Name, Tmp.[Cell Phone] )
关键提示
- 用
MIN(DeveloperID)或MAX(DeveloperID)指定同组记录的保留规则,按需选择即可 - 操作前务必备份数据库,防止数据丢失
- 若表中无主键,先通过设计视图添加自动编号字段
DeveloperID,Access需要唯一标识来精准执行删除操作
内容的提问来源于stack exchange,提问作者Do Hun Kim
相关产品推荐
相关产品推荐

