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

如何在列中精确匹配仅含指定多个UPC值的拣货单?

仅包含指定UPC的拣货单查询方案

你需要的是只包含指定UPC(038447302、00934831)的拣货单,原查询的问题在于:它只是筛选出包含这两个UPC的条目,但没有排除那些拣货单中同时存在其他UPC的情况。

解决方案一:使用HAVING子句过滤拣货单的UPC范围

通过分组到拣货单级别,确保该拣货单下所有UPC都属于指定集合,且不同UPC的数量正好等于你指定的数量(这里是2):

SELECT 
  a.order_id, 
  a.id AS picklist_id, 
  SUM(p.quantity), 
  pick_zone, 
  a.STATUS 
FROM 
  picklists a 
  INNER JOIN picklist_items p ON p.picklist_id = a.id 
  INNER JOIN warehouse_orders f ON a.order_id = f.id 
WHERE 
  a.STATUS IN ('dropped') 
  AND f.status != 'cancelled' 
  AND p.upc IN ('038447302', '00934831') 
GROUP BY 
  a.STATUS, 
  a.picklist_group_id, 
  a.id, 
  a.order_id, 
  pick_zone 
HAVING 
  COUNT(DISTINCT p.upc) = 2

逻辑说明:

  1. WHERE子句先过滤出状态符合要求、且包含指定UPC的条目;
  2. GROUP BY按拣货单分组后,HAVING COUNT(DISTINCT p.upc) = 2确保该拣货单下只有这两个指定的UPC(没有其他额外UPC)。如果后续指定的UPC数量变化,只需修改这个数字即可。

解决方案二:用子查询排除含其他UPC的拣货单

先找出所有包含非指定UPC的拣货单ID,再在主查询中排除这些ID:

SELECT 
  a.order_id, 
  a.id AS picklist_id, 
  SUM(p.quantity), 
  p.upc, 
  pick_zone, 
  a.STATUS 
FROM 
  picklists a 
  INNER JOIN picklist_items p ON p.picklist_id = a.id 
  INNER JOIN warehouse_orders f ON a.order_id = f.id 
WHERE 
  a.STATUS IN ('dropped') 
  AND f.status != 'cancelled' 
  AND a.id NOT IN (
    SELECT DISTINCT picklist_id 
    FROM picklist_items 
    WHERE upc NOT IN ('038447302', '00934831')
  )
GROUP BY 
  a.STATUS, 
  a.picklist_group_id, 
  a.id, 
  a.order_id, 
  pick_zone,
  p.upc

逻辑说明:

子查询先找出所有包含非指定UPC的拣货单ID,主查询通过NOT IN排除这些拣货单,剩下的就是仅包含指定UPC的拣货单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:35:21