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

SQL实现筛选关联最终产品全为Active状态的物料分组

物料关联产品状态分组筛选SQL实现

核心逻辑

按物料维度分组,仅保留所有关联最终产品状态均为Active的物料,其余两类(状态混杂、全为Inactive)全部排除。
假设业务表名为material_part,核心字段如下:

  • material_id:物料零件唯一标识
  • final_product_id:关联的最终产品唯一标识
  • product_status:最终产品状态,枚举值为Active(启用)、Inactive(停用)

实现方案

方案1:分组聚合筛选(优先推荐,性能更好)

直接按物料ID分组,通过HAVING子句过滤掉存在非Active状态关联产品的物料,适合直接提取符合条件的物料清单:

SELECT 
  material_id
  -- 若需要查询物料其他属性,可通过聚合函数获取,例如 MAX(material_name) AS material_name
FROM material_part
GROUP BY material_id
HAVING SUM(
  CASE 
    -- 若状态字段可能为NULL,可在此处加 OR product_status IS NULL 把空值按非Active处理
    WHEN product_status <> 'Active' THEN 1 
    ELSE 0 
  END
) = 0;

方案2:反向不存在校验(适合提取明细场景)

如果需要拿到符合条件的物料对应的所有关联产品明细行,可使用NOT EXISTS写法,避免分组聚合:

SELECT DISTINCT
  m.material_id,
  m.final_product_id,
  m.product_status
  -- 可加其他需要的明细字段
FROM material_part m
WHERE NOT EXISTS (
  SELECT 1
  FROM material_part m2
  WHERE m2.material_id = m.material_id
    AND m2.product_status <> 'Active'
    -- 同样,NULL场景可加 OR m2.product_status IS NULL
);

逻辑校验

物料关联产品状态情况非Active状态计数是否被筛选保留匹配规则
全部为Active0是规则1
同时存在Active/Inactive大于0否规则2
全部为Inactive等于组内总行数(大于0)否规则2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:27:25