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

SQL查询需求:过滤重复行保留唯一行,忽略同key重复项

解决SQL去重查询问题

问题核心

你需要保留表中所有列组合唯一的行:完全重复的行(如id=1的两条ACB3记录)只留一行,列组合不同的行(如id=2的XY4和ZZ5)全部保留。

正确解决方案

方案1:使用DISTINCT(最简洁)

直接对所有查询列去重,是实现该需求最直观的方式:

SELECT DISTINCT id, name, class, `key`
FROM A;

注:key是SQL保留关键字,需用反引号(MySQL)或方括号(SQL Server)包裹,避免语法错误。

方案2:使用GROUP BY(适合后续扩展)

如果需要后续添加聚合逻辑,可按所有列分组,确保每个唯一组合仅返回一行:

SELECT id, name, class, `key`
FROM A
GROUP BY id, name, class, `key`;

该写法符合SQL标准,在开启ONLY_FULL_GROUP_BY模式的MySQL或其他严格模式数据库中均可正常执行。

原有查询的问题分析

  1. 分组维度错误:你的GROUP BY仅包含id, name, class,未加入key列,导致key不同的记录(如id=2的两条)被错误归为同一组,完全重复的记录也无法正确去重。
  2. 不必要的过滤与字段:having count(*) > 1是筛选分组后数量大于1的组,但你的需求是保留所有唯一行(无论重复次数),该条件会错误过滤掉仅出现一次的行;同时count(*)并非你需要返回的字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:57:13