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

Access SQL:删除Year为2013的指定多字段重复全量记录

Access查询:删除指定条件下的全部重复记录

需求说明

删除carTable表中满足以下条件的所有重复实例(全部删除,不保留任何一条):

  • Brand、SerialNr、Seats、LastRepair字段值完全重复
  • Year字段值为2013

原表数据

BrandSerialNrSeatsColorLastRepairYear
Ford1454Blue01.01.20202010
Ford1454Red01.01.20202010
Ford1454Red01.01.20202013
Ford1454Green01.01.20202013
Porsche1462White01.01.20222013
Ferrari1462White01.01.20222013
Volkswagen1474Blue01.01.20212017
Volkswagen1474Red01.01.20212013
Volkswagen1474Orange01.01.20212013

期望目标表

BrandSerialNrSeatsColorLastRepairYear
Ford1454Blue01.01.20202010
Ford1454Red01.01.20202010
Porsche1462White01.01.20222013
Ferrari1462White01.01.20222013
Volkswagen1474Blue01.01.20212017

尝试过的方法及失败SQL

曾尝试查找重复查询、外连接方法,编写的SQL如下(未成功):

DELETE Exists (SELECT 1 
   FROM carTable As t2 
   WHERE t1.Brand = t2.Brand AND t1.SerialNr = t2.SerialNr AND t1.Seats = t2.Seats AND t1.LastRepair = t2.LastRepair
   HAVING Count(*) > 1
), t1.[FilNr], *
FROM carTable AS t1, carTable
WHERE (((Exists (SELECT 1 
   FROM carTable As t2 
   WHERE t1.Brand = t2.Brand AND t1.SerialNr = t2.SerialNr AND t1.Seats = t2.Seats AND t1.LastRepair = t2.LastRepair
   HAVING Count(*) > 1
))<>False) AND ((t1.[year])=2013));

解决方案

核心思路

先找出Year=2013范围内,Brand、SerialNr、Seats、LastRepair组合重复的分组(即该分组下记录数>1),再删除原表中属于这些分组且Year=2013的所有记录。

方法1:使用IN子查询(Access支持多字段IN)

DELETE FROM carTable
WHERE Year = 2013
AND (Brand, SerialNr, Seats, LastRepair) IN (
    SELECT Brand, SerialNr, Seats, LastRepair
    FROM carTable
    WHERE Year = 2013
    GROUP BY Brand, SerialNr, Seats, LastRepair
    HAVING COUNT(*) > 1
);

方法2:使用INNER JOIN(兼容所有Access版本)

DELETE t1.*
FROM carTable AS t1
INNER JOIN (
    SELECT Brand, SerialNr, Seats, LastRepair
    FROM carTable
    WHERE Year = 2013
    GROUP BY Brand, SerialNr, Seats, LastRepair
    HAVING COUNT(*) > 1
) AS t2
ON t1.Brand = t2.Brand 
AND t1.SerialNr = t2.SerialNr 
AND t1.Seats = t2.Seats 
AND t1.LastRepair = t2.LastRepair
WHERE t1.Year = 2013;

原SQL错误分析

  1. Exists子句中未使用GROUP BY就直接用HAVING,逻辑不成立——HAVING必须配合GROUP BY使用
  2. 多余的carTable表连接导致查询逻辑混乱,无实际意义
  3. DELETE语句的字段列表写法错误,Access中删除整行只需指定表或别名加*

内容的提问来源于stack exchange,提问作者Lily of the Valley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:31:06