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

如何检测表中ID重复但NAME/DATE不同的记录?

检测ID重复但NAME/DATE字段值不同的记录

需求:找出ID重复,但NAME或DATE字段值存在差异的记录,ID、NAME、DATE三者完全重复的属于正常情况,无需排查。

原SQL的问题

你之前的SQL语句是按ID, NAME, DATE分组并统计重复次数,这实际是在筛选三者完全重复的记录,和需求完全相反,因此无法得到目标结果。

解决方案

以下提供几种可行的SQL写法,适配不同数据库环境:

方法1:子查询关联(兼容多数数据库)

先筛选出存在多个不同NAME+DATE组合的ID,再关联原表获取对应记录:

SELECT t.ID, t.NAME, t.DATE
FROM TABLE t
INNER JOIN (
    SELECT ID
    FROM TABLE
    GROUP BY ID
    -- 判断同一ID下有不同的NAME+DATE组合
    HAVING COUNT(DISTINCT CONCAT(NAME, DATE)) > 1
) dup_ids ON t.ID = dup_ids.ID;

方法2:窗口函数写法(支持窗口函数的数据库:MySQL8.0+/PostgreSQL/SQL Server等)

通过窗口函数按ID分组,计算每个ID下不同的NAME+DATE组合数,直接筛选符合条件的记录:

SELECT ID, NAME, DATE
FROM (
    SELECT 
        ID, NAME, DATE,
        COUNT(DISTINCT CONCAT(NAME, DATE)) OVER (PARTITION BY ID) AS combo_count
    FROM TABLE
) t
WHERE combo_count > 1;

方法3:更直观的分组判断

如果想直接判断NAME或DATE是否存在差异,可以修改子查询的HAVING条件:

SELECT t.ID, t.NAME, t.DATE
FROM TABLE t
INNER JOIN (
    SELECT ID
    FROM TABLE
    GROUP BY ID
    -- 同一ID下NAME有多个值,或DATE有多个值
    HAVING COUNT(DISTINCT NAME) > 1 OR COUNT(DISTINCT DATE) > 1
) dup_ids ON t.ID = dup_ids.ID;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:35:01