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

如何根据重复的ComputerCN字段获取对应的ComputerID列表?

获取重复ComputerCN对应的ComputerID列表

问题说明

你需要找出所有ComputerCN字段重复的记录对应的ComputerID,之前的分组查询仅能统计重复的ComputerCN数量,但无法直接返回对应ID;加入ComputerID到分组条件后,会因为ID的唯一性导致查询失效。

解决方案

以下是几种通用的实现方式:

方法一:子查询筛选重复的ComputerCN

先通过子查询找出所有存在重复的ComputerCN,再关联原表获取对应的ID:

SELECT ComputerID
FROM Computer
WHERE ComputerCN IN (
    SELECT ComputerCN
    FROM Computer
    GROUP BY ComputerCN
    HAVING COUNT(*) > 1
);

方法二:窗口函数(适用于MySQL 8+、PostgreSQL、SQL Server等)

利用窗口函数直接计算每个ComputerCN的重复次数,再筛选出次数大于1的记录:

SELECT ComputerID
FROM (
    SELECT 
        ComputerID,
        COUNT(*) OVER (PARTITION BY ComputerCN) AS duplicate_count
    FROM Computer
) AS temp
WHERE duplicate_count > 1;

方法三:自连接匹配重复项

通过自连接找到相同ComputerCN但不同ComputerID的记录,再去重得到结果:

SELECT DISTINCT c1.ComputerID
FROM Computer c1
JOIN Computer c2 
ON c1.ComputerCN = c2.ComputerCN 
AND c1.ComputerID != c2.ComputerID;

为什么之前的查询无效?

当你把ComputerID加入GROUP BY子句后,分组逻辑变成了按ComputerCN+ComputerID的组合进行分组。由于ComputerID是唯一标识,每个分组只会包含一条记录,COUNT(*)的结果始终为1,因此HAVING COUNT(*) > 1无法匹配到任何数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 19:47:06