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

获取不含状态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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:15:32