You need to enable JavaScript to run this app. SQL表中nvarchar类型字段重复值查找及现有查询无结果问题
优惠活动
大模型
产品
解决方案
定价
更多

SQL表中nvarchar类型字段重复值查找及现有查询无结果问题

原SQL无法返回结果的核心问题
  • 分组维度完全错了:你把每行独有的Name字段也放进了GROUP BY的分组条件里,分组后每一组就是单独的一行,不管怎么统计COUNT,结果最多就是1,根本不可能满足>1的判定。
  • 重复判定逻辑和需求错位:
    你实际要的筛选规则是「只要某一行里的任意一个非空字段值,在全表其他行出现过相同取值,就保留这行」,但原SQL的HAVING写的是三个字段的计数用AND连接,要求同一行的ID、ID1、ID3三个值同时都有重复才能被选中,和预期规则完全不符。
    另外COUNT(字段)本身不会统计空值,哪怕调整分组逻辑,像示例里AB4的ID3是空、AB6的ID1是空,这些空值对应的计数永远是1,根本过不了AND的校验。
可匹配预期结果的实现写法

用「先捞出全表所有列中存在重复的非空值,再匹配回原表保留符合条件的行」的逻辑就能实现,通用SQL语法如下:

SELECT 
    t.Name, t.ID, t.ID1, t.ID3
FROM 你的数据表名 t
WHERE 
    -- 只要行内任意一个非空字段值存在跨表重复,就保留该行
    (t.ID IS NOT NULL AND t.ID IN (SELECT ID FROM 你的数据表名 WHERE ID IS NOT NULL GROUP BY ID HAVING COUNT(*) >1))
    OR
    (t.ID1 IS NOT NULL AND t.ID1 IN (SELECT ID1 FROM 你的数据表名 WHERE ID1 IS NOT NULL GROUP BY ID1 HAVING COUNT(*) >1))
    OR
    (t.ID3 IS NOT NULL AND t.ID3 IN (SELECT ID3 FROM 你的数据表名 WHERE ID3 IS NOT NULL GROUP BY ID3 HAVING COUNT(*) >1))

按照示例数据执行后,返回的结果和你贴的预期完全一致:

  • AB1:ID值234ACB、ID1值BCD123、ID3值EFD234都存在重复,被保留
  • AB4:ID值234ACB、ID1值BCD123存在重复,被保留
  • AB6:ID3值EFD234存在重复,被保留
  • AB7:ID1值BCD123、ID3值EFD234存在重复,被保留
    剩下的AB2、AB3、AB5行,所有非空字段值都是全表唯一的,会被自动过滤掉。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 09:06:03