SQL Server中如何返回存在重复Type值的记录ID?
解决方法:获取所有Type重复的完整记录
嘿,我懂你的需求了——你要的是所有对应重复Type值的ID和Type记录,而不只是重复的Type本身对吧?你原来的SQL用GROUP BY确实只能返回分组后的聚合结果(也就是重复的Type值),没法拿到每条具体的ID,所以得换个思路,下面给你两种常用的解法:
方法1:子查询+关联表
先通过子查询找出所有出现次数大于1的Type,再和原表关联,就能拿到所有对应这些Type的完整记录:
SELECT a.id, a.Type FROM A a INNER JOIN ( -- 先筛选出重复的Type值 SELECT Type FROM A GROUP BY Type HAVING COUNT(*) > 1 ) duplicate_types ON a.Type = duplicate_types.Type ORDER BY a.id;
方法2:窗口函数(推荐,适合现代数据库)
如果你的数据库支持窗口函数(比如MySQL 8.0+、PostgreSQL、SQL Server等),这个方法更简洁直观:
SELECT id, Type FROM ( SELECT id, Type, -- 按Type分组计算每个Type的总条数 COUNT(*) OVER (PARTITION BY Type) AS type_total FROM A ) temp_table -- 只保留总条数大于1的记录 WHERE type_total > 1 ORDER BY id;
为什么你的原SQL不行?
你的原SQL里SELECT Name应该是笔误(表字段是Type),核心问题是GROUP BY Type会把相同Type的行合并成一行,所以只能返回一个Me,而没法拿到每条对应的ID。上面两种方法都能避免这个问题,完整返回所有重复Type的记录。
内容的提问来源于stack exchange,提问作者Ashwesh Anand
相关产品推荐
相关产品推荐

