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

如何从stats表中查询仅向单一卖家采购零件的项目id_proj

问题分析

你原有SQL的逻辑和需求完全不匹配:你写的语句是筛选采购的所有零件都不属于卖家S5售卖范围的项目,而需求是筛选采购的所有零件都只有唯一供应商的项目,没有限定供应商为固定的S5。

正确SQL实现

实现逻辑

  1. 先统计每个零件的不同供应商数量,筛选出存在多个供应商的零件集合
  2. 排除所有采购过上述多供应商零件的项目,剩余的就是所有采购零件都只有唯一供应商的项目
SELECT DISTINCT id_proj
FROM stats
WHERE id_proj NOT IN (
    -- 找出所有采购过多供应商零件的项目
    SELECT DISTINCT s.id_proj
    FROM stats s
    INNER JOIN (
        -- 找出所有有多个供应商的零件
        SELECT id_part
        FROM stats
        GROUP BY id_part
        HAVING COUNT(DISTINCT id_seller) > 1
    ) multi_seller_parts ON s.id_part = multi_seller_parts.id_part
);

如果你使用的数据库支持CTE语法,也可以用可读性更好的写法:

WITH multi_seller_parts AS (
    SELECT id_part
    FROM stats
    GROUP BY id_part
    HAVING COUNT(DISTINCT id_seller) > 1
),
invalid_proj AS (
    SELECT DISTINCT id_proj
    FROM stats s
    INNER JOIN multi_seller_parts msp ON s.id_part = msp.id_part
)
SELECT DISTINCT id_proj
FROM stats
WHERE id_proj NOT IN (SELECT id_proj FROM invalid_proj);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:06:02