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

如何从同一张表中查询ID与valC字段均匹配的重复行

SQL筛选指定字段组合重复行的实现方案

需求核心

你需要筛选的是**ID和valC两个字段的组合重复出现≥2次**的所有行,忽略valA、valB的取值差异。

推荐实现方案(更适合初学者,逻辑清晰不易错)

用窗口函数实现,分层逻辑便于排查问题:

SELECT ID, valA, valB, valC
FROM (
    SELECT
        *,
        -- 按ID和valC分组,统计每组的行数
        COUNT(*) OVER (PARTITION BY ID, valC) AS group_row_count
    FROM 你的表名
) tmp
-- 过滤出行数≥2的组,也就是存在重复的组的所有行
WHERE group_row_count >= 2;

运行上述代码会直接返回你预期的ID=2、valC=LA的两条重复行。

COUNT+INNER JOIN的正确写法

你之前用这个方法没得到预期结果,大概率是分组时错误加入了valA/valB字段,正确写法如下:

SELECT t1.*
FROM 你的表名 t1
INNER JOIN (
    -- 先找出所有重复的(ID, valC)组合
    SELECT ID, valC
    FROM 你的表名
    GROUP BY ID, valC
    HAVING COUNT(*) >= 2
) t2 ON t1.ID = t2.ID AND t1.valC = t2.valC;

初学者技巧建议

  • 处理重复行需求时,第一步先明确判断重复的字段组合,所有分组、关联的逻辑都要严格对齐这个组合,不要多增/遗漏字段
  • 优先用窗口函数处理这类行级过滤需求,排查问题时可以先单独运行内层子查询,确认分组计数的结果是否符合预期,再做外层过滤
  • 用GROUP BY分组时,只需要把判断重复的字段加入分组规则,其他不需要判断的字段不要加进去,否则会缩小重复判定的范围,得到错误结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:15:08