You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access中基于多字段删除重复记录并保留最低priority值的方法

在Access中删除重复记录并保留priority最低项的正确方法

错误原因分析

你原SQL语句报错是因为Access的Jet SQL不支持多字段组合直接放在NOT IN中,同时原语句的逻辑也未正确关联分组与原表的匹配关系。

正确实现方式

方法1:关联子查询直接删除

通过子查询找到当前记录对应分组的最小priority,删除所有priority大于该值的记录:

DELETE tbl.*
FROM tbl
WHERE tbl.priority > (
    SELECT MIN(t.priority)
    FROM tbl AS t
    WHERE t.UN = tbl.UN 
      AND t.PSN = tbl.PSN 
      AND t.Class = tbl.Class 
      AND t.ClassAll = tbl.ClassAll 
      AND t.PG = tbl.PG
);

注意:如果同一分组中有多条记录priority值同为最小值,此方法会保留所有这些记录。

方法2:通过主键ID筛选保留记录

如果你的表有主键(比如示例中的ID字段),可以先找出每个分组中priority最小的记录ID,再删除不在该列表中的记录,逻辑更清晰:

DELETE tbl.*
FROM tbl
WHERE tbl.ID NOT IN (
    SELECT sub.ID
    FROM (
        -- 先获取每个分组的最小priority值
        SELECT UN, PSN, Class, ClassAll, PG, MIN(priority) AS MinPriority
        FROM tbl
        GROUP BY UN, PSN, Class, ClassAll, PG
    ) AS sub
    -- 关联原表找到对应最小priority的记录ID
    INNER JOIN tbl ON sub.UN = tbl.UN 
                  AND sub.PSN = tbl.PSN 
                  AND sub.Class = tbl.Class 
                  AND sub.ClassAll = tbl.ClassAll 
                  AND sub.PG = tbl.PG 
                  AND sub.MinPriority = tbl.priority
);

若同一分组中有多条priority同为最小值的记录,此方法会保留所有这些记录;如果只想保留其中一条,可将子查询中的sub.ID改为MIN(sub.ID)或MAX(sub.ID)。

重要提醒

  1. 执行删除前务必备份数据,避免误删;
  2. 可先将DELETE tbl.*替换为SELECT tbl.*,验证查询结果是否符合预期后再执行删除操作。

内容的提问来源于stack exchange,提问作者MK01111000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 08:10:03