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

如何筛选仅含05_A仓储类型、不含05_B的artid数据?

筛选存在05_A但无05_B的商品ID的SQL实现

错误语句分析

  • 第一个语句逻辑矛盾:同一行记录的warehousetype不可能同时满足like '05_A'和not like '05_A',因此返回结果为空。
  • MINUS语句若未精准限定范围,可能会返回所有不包含05_B的记录(包括从未有过05_A的商品),不符合“必须存在05_A”的要求。

正确实现方案

方案1:GROUP BY + HAVING(推荐,适合统计场景)

通过分组统计每个商品的特性存在情况,筛选出符合条件的商品ID:

SELECT artid
FROM your_table_name
GROUP BY artid
HAVING COUNT(CASE WHEN warehousetype = '05_A' THEN 1 END) > 0
   AND COUNT(CASE WHEN warehousetype = '05_B' THEN 1 END) = 0;

或用SUM写法:

SELECT artid
FROM your_table_name
GROUP BY artid
HAVING SUM(CASE WHEN warehousetype = '05_A' THEN 1 ELSE 0 END) > 0
   AND SUM(CASE WHEN warehousetype = '05_B' THEN 1 ELSE 0 END) = 0;

方案2:NOT EXISTS子查询(逻辑直观)

先筛选出有05_A的商品,再排除其中存在05_B的商品:

SELECT DISTINCT artid
FROM your_table_name t1
WHERE t1.warehousetype = '05_A'
  AND NOT EXISTS (
    SELECT 1
    FROM your_table_name t2
    WHERE t2.artid = t1.artid
      AND t2.warehousetype = '05_B'
  );

方案3:LEFT JOIN + IS NULL(关联查询方式)

通过左连接匹配05_B的记录,筛选出匹配失败(即无05_B)且本身有05_A的商品:

SELECT DISTINCT t1.artid
FROM your_table_name t1
LEFT JOIN your_table_name t2
  ON t1.artid = t2.artid
  AND t2.warehousetype = '05_B'
WHERE t1.warehousetype = '05_A'
  AND t2.artid IS NULL;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:01:03