如何查询指定日期的所有商品订单行,无订单时显示数量为0
解决指定日期全商品订单数量查询问题
要实现你要的结果,核心是要保留所有商品记录,哪怕该日期没有对应的订单数据。用LEFT JOIN(左连接)配合COALESCE函数就能轻松搞定,具体SQL如下:
SELECT i.ItemID, COALESCE(ol.Quantity, 0) AS Quantity FROM Item i LEFT JOIN OrderLine ol ON i.ItemID = ol.ItemID AND ol.Date = '2020-06-04'; -- 把日期条件放在JOIN的ON子句里,而非WHERE
关键细节说明:
- LEFT JOIN的作用:以
Item表为主表,强制保留所有商品的记录,哪怕OrderLine中没有该商品在指定日期的订单,此时OrderLine的对应字段会返回NULL。 - 日期条件放在ON子句:如果把
ol.Date = '2020-06-04'放在WHERE子句里,会过滤掉所有没有匹配订单的商品行,直接变成内连接的效果,就达不到你要的全商品展示需求了。 - COALESCE函数:专门用来把NULL值替换成0,正好满足“无订单时显示0”的要求。
如果需要同时显示商品名称,只需要在SELECT里加上i.ItemName即可:
SELECT i.ItemID, i.ItemName, COALESCE(ol.Quantity, 0) AS Quantity FROM Item i LEFT JOIN OrderLine ol ON i.ItemID = ol.ItemID AND ol.Date = '2020-06-04';
内容的提问来源于stack exchange,提问作者user13154320
相关产品推荐
相关产品推荐

