如何筛选未包含Wipes商品的订单ID?
解决方法:筛选未包含Wipes商品的订单ID
你的原查询逻辑存在问题:WHERE ITEM <> 'WIPES'只会过滤掉单条商品为Wipes的记录,但如果某个订单同时包含Wipes和其他商品,其他商品的记录依然会被选中,DISTINCT后该订单ID还是会出现在结果里。要筛选完全没有Wipes商品的订单,可以用以下几种方法:
方法1:使用NOT EXISTS子查询
这是最直观且性能较好的方案之一,检查每个订单是否不存在Wipes商品:
SELECT DISTINCT ORDERID FROM ORDERS o WHERE NOT EXISTS ( SELECT 1 FROM ORDERS WHERE ORDERID = o.ORDERID AND ITEM = 'WIPES' )
方法2:使用GROUP BY + HAVING子句
通过分组统计每个订单中Wipes的数量,筛选数量为0的订单:
SELECT ORDERID FROM ORDERS GROUP BY ORDERID HAVING SUM(CASE WHEN ITEM = 'WIPES' THEN 1 ELSE 0 END) = 0
或者更简洁的写法(多数主流数据库支持):
SELECT ORDERID FROM ORDERS GROUP BY ORDERID HAVING COUNT(CASE WHEN ITEM = 'WIPES' THEN 1 END) = 0
方法3:使用LEFT JOIN排除关联记录
通过左连接自身表,筛选出无法关联到Wipes商品的订单:
SELECT DISTINCT o.ORDERID FROM ORDERS o LEFT JOIN ORDERS w ON o.ORDERID = w.ORDERID AND w.ITEM = 'WIPES' WHERE w.ORDERID IS NULL
以上三种方法都能准确筛选出未包含Wipes商品的订单ID(即你期望的00FF6248和1F210331)。
内容的提问来源于stack exchange,提问作者sergio089
相关产品推荐
相关产品推荐

