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

MySQL关联两表后无法显示指定时段未售出到货商品问题

基于订单日期筛选,展示所有到货商品的售出统计(含未售出)

需求与问题

需求:展示指定时段内所有已售出和未售出的到货商品。
问题:使用LEFT JOIN关联arrivals表与orders表时,若在WHERE条件中筛选orders.date介于'2022-11-01'至'2022-12-20'之间,会导致未售出的到货商品无法被查询到;若改用arrivals.date作为筛选条件,虽然能显示全部到货商品,但不符合“基于订单表日期筛选”的要求。

原SQL语句

select arrivals.description,
    COALESCE(sum(orders.quantity ), 0) as quantity
from arrivals
left join orders
on arrivals.description = orders.description
where orders.date between '2022-11-01' and '2022-12-20'
group by orders.description

ORDERS表数据

iddatedescriptionquantity
72022-11-27nike 500 black 701
12022-11-24nike 500 black 701
22022-11-24nike 500 black 601
62022-11-28adidas 1000 white 901
52022-11-27adidas 1000 white 901
42022-10-31adidas 1000 white 901
32022-10-31adidas 1000 white 801

ARRIVALS表数据

iddatedescriptionquantity
12022-10-30nike 500 black 502
22022-10-30nike 500 black 603
32022-10-30nike 500 black 704
42022-10-29adidas 1000 white 802
52022-10-29adidas 1000 white 903
62022-10-29adidas 1000 white 1102

当前执行结果

descriptionquantity
nike 500 black 601
nike 500 black 702
adidas 1000 white 902

解决方案

问题核心:LEFT JOIN后,未售出商品对应的orders表字段全为NULL,WHERE orders.date BETWEEN ...会直接排除这些NULL行。需将订单日期的筛选条件移至LEFT JOIN的ON子句中,同时GROUP BY要基于arrivals.description(避免因orders.description为NULL导致分组异常)。

修正后的SQL语句:

select arrivals.description,
    COALESCE(sum(orders.quantity), 0) as quantity
from arrivals
left join orders
on arrivals.description = orders.description
   and orders.date between '2022-11-01' and '2022-12-20'
group by arrivals.description

预期执行结果

descriptionquantity
nike 500 black 500
nike 500 black 601
nike 500 black 702
adidas 1000 white 800
adidas 1000 white 902
adidas 1000 white 1100

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 06:25:24