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

如何通过SQL筛选出所有商品重量均不超过50的订单?

解决筛选无超重商品订单的SQL问题

嘿,我来帮你搞定这个需求!你要找的是所有商品重量都不超过50的订单,本质上就是排除那些存在至少一件商品重量>50的订单。这里有两种常用的高效解法:

方法1:使用NOT EXISTS子查询

这种方法逻辑非常直观,直接检查每个订单是否不存在超重的关联商品:

SELECT DISTINCT a.order_id
FROM orders a
WHERE NOT EXISTS (
    SELECT 1
    FROM items b
    WHERE a.item_id = b.item_id
    AND b.item_weight > 50
);

如果需要同时展示订单下的商品明细,可以把上面的查询作为子查询过滤原结果:

SELECT a.order_id, b.item_name, b.item_weight
FROM orders a
JOIN items b ON a.item_id = b.item_id
WHERE a.order_id IN (
    SELECT DISTINCT order_id
    FROM orders o
    WHERE NOT EXISTS (
        SELECT 1
        FROM items i
        WHERE o.item_id = i.item_id
        AND i.item_weight > 50
    )
);

方法2:使用GROUP BY + HAVING子句

这种方法更简洁,通过分组订单ID,筛选出该订单下所有商品的最大重量≤50的订单:

-- 先获取符合条件的订单ID
SELECT order_id
FROM orders a
JOIN items b ON a.item_id = b.item_id
GROUP BY order_id
HAVING MAX(b.item_weight) <= 50;

-- 如果需要展示商品明细,同样可以关联原表
SELECT a.order_id, b.item_name, b.item_weight
FROM orders a
JOIN items b ON a.item_id = b.item_id
WHERE a.order_id IN (
    SELECT order_id
    FROM orders o
    JOIN items i ON o.item_id = i.item_id
    GROUP BY order_id
    HAVING MAX(i.item_weight) <= 50
);

针对你的示例数据

两种方法都会筛选出order_id=2的订单,因为它的所有商品重量都≤50;而order_id=1因为有一件商品重量为60,会被排除在外。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:53:14