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

MySQL如何查询一对多关联表中子表指定列全非空的订单状态

多表关联订单状态查询方案

表结构说明

现有两张一对多关联的业务表:

  • 主表 order(订单主表)
    包含字段:order_id(订单唯一标识,主键)、order_date(订单创建日期)
  • 子表 detail_order(订单明细表)
    包含字段:detail_order_id(明细唯一标识,主键)、order_id(关联主表的订单ID)、is_finished(单条明细的完成状态)

状态判定规则

  • 同一订单下所有明细的is_finished字段不存在NULL值,订单状态标记为 finished
  • 同一订单下存在任意一条明细的is_finished为NULL,订单状态标记为 not finish

实现SQL

SELECT
  o.order_id,
  CASE
    WHEN COUNT(d.is_finished) = COUNT(*) THEN 'finished'
    ELSE 'not finish'
  END AS order_status
FROM `order` o
LEFT JOIN detail_order d ON o.order_id = d.order_id
GROUP BY o.order_id
ORDER BY o.order_id;

逻辑说明:SQL标准中COUNT(指定字段)统计时会自动跳过NULL值,因此当COUNT(is_finished)和统计总明细条数的COUNT(*)相等时,说明该订单下所有明细的is_finished都不为空,符合完成状态判定条件,反之则存在未完成的明细。

预期输出结果

order_idorder_status
1not finish
2finished
3not finish

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:09:03