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

查询在多台Computer中出现的Component条目SQL无结果排查

问题分析与解决方案

你的SQL查询没有返回结果,核心问题出在分组逻辑上:

你原语句里GROUP BY Component.Piece, NO_COMPUTER会把每个组件(Piece)和对应的单个电脑编号(NO_COMPUTER)分为一组,每个分组里只会有一个唯一的NO_COMPUTER,所以不管你用COUNT(DISTINCT cpt.NO_COMPUTER)还是普通的COUNT,结果都是1,永远满足不了>1的HAVING条件,自然查不到数据。

要实现“找出在多台电脑里出现的所有组件条目”,可以用以下两种方法:

方法1:先筛选目标组件,再关联查询

先通过子查询找出所有在多台电脑中出现的组件编号,再关联两张表获取这些组件对应的所有电脑条目:

SELECT cmp.Piece, cpt.NO_COMPUTER
FROM Component cmp
INNER JOIN Computer cpt ON cmp.Piece = cpt.Piece
WHERE cmp.Piece IN (
    -- 子查询:找出对应多台电脑的组件
    SELECT Piece
    FROM Computer
    GROUP BY Piece
    HAVING COUNT(DISTINCT NO_COMPUTER) > 1
);

方法2:使用窗口函数直接计算

用窗口函数按组件分组,计算每个组件关联的电脑数量,再筛选数量大于1的记录:

SELECT Piece, NO_COMPUTER
FROM (
    SELECT 
        cmp.Piece, 
        cpt.NO_COMPUTER,
        -- 按组件分区,计算该组件对应的不同电脑总数
        COUNT(DISTINCT cpt.NO_COMPUTER) OVER (PARTITION BY cmp.Piece) AS computer_count
    FROM Component cmp
    INNER JOIN Computer cpt ON cmp.Piece = cpt.Piece
) AS sub
WHERE computer_count > 1;

这两种方法都能正确返回所有在多台电脑中出现的组件条目,比如你测试的i7 9210对应的两行记录会被正常查出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:17:17