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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:57:47