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

如何排除关联表order_status中含指定status_id的orders订单?

解决方法

你的问题出在原SQL会返回订单中所有status_id !=1的记录,哪怕该订单同时存在status_id=1的记录。要实现完全排除所有包含status_id=1的订单,可以用以下几种方案:

方案一:使用NOT EXISTS(推荐,逻辑清晰)

直接筛选不存在status_id=1关联记录的订单:

SELECT o.id AS order_id
FROM orders o
WHERE NOT EXISTS (
    SELECT 1
    FROM order_status os
    WHERE os.order_id = o.id
      AND os.status_id = 1
)

方案二:使用LEFT JOIN + 空值筛选

通过左关联status_id=1的记录,筛选未匹配到的订单(即无status_id=1的订单):

SELECT o.id AS order_id
FROM orders o
LEFT JOIN order_status os
    ON o.id = os.order_id
    AND os.status_id = 1
WHERE os.id IS NULL

方案三:使用GROUP BY + HAVING

对订单分组后,检查是否存在status_id=1的记录,仅保留无该状态的订单:

SELECT os.order_id
FROM order_status os
GROUP BY os.order_id
HAVING MAX(CASE WHEN os.status_id = 1 THEN 1 ELSE 0 END) = 0

注意:此方案仅会返回在order_status表中有记录的订单,如果需要包含从未有过任何状态的订单,优先选择前两种方案。


内容的提问来源于stack exchange,提问作者João

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 03:46:00