获取不含状态7(Delivered)的订单ID的MySQL查询
解决方案
这里提供几种实现需求的SQL写法,核心都是筛选出没有任何状态为7(Delivered)记录的order_id:
方法一:使用
NOT EXISTS子查询
这种方式效率较高,直接检查当前order_id是否不存在状态为7的关联记录:SELECT DISTINCT order_id FROM order_items oi WHERE NOT EXISTS ( SELECT 1 FROM order_items oi2 WHERE oi2.order_id = oi.order_id AND oi2.status = 7 );方法二:分组后用
HAVING过滤
通过分组统计每个order_id下状态为7的记录数,只保留数量为0的order_id:SELECT order_id FROM order_items GROUP BY order_id HAVING SUM(CASE WHEN status = 7 THEN 1 ELSE 0 END) = 0;方法三:用
NOT IN排除含状态7的order_id
先找出所有状态为7的order_id,再从总列表中排除这些id:SELECT DISTINCT order_id FROM order_items WHERE order_id NOT IN ( SELECT order_id FROM order_items WHERE status = 7 );
补充说明:如果同一个order_id对应多条记录,
DISTINCT用来确保最终结果里每个order_id只出现一次;若业务中order_id在表中是唯一的(每条记录对应唯一order_id),可以去掉DISTINCT。
内容的提问来源于stack exchange,提问作者Anand Shrivastava
相关产品推荐
相关产品推荐

