SQL多表关联查询获取所有产品总销售额的错误排查
问题分析
你原有的SQL存在以下几处逻辑和语法问题:
- 别名不符合规范:
as total sales包含空格,需改为无空格的total_sales或用引号包裹 - 关联逻辑错误:
product右联receipt_product后又内联receipt,会直接过滤掉没有交易记录的产品,无法满足「查询所有产品」的需求 - 空值处理缺失:没有交易记录的产品求和后结果为
NULL,需转换为0更符合业务含义 - 过滤条件不符合需求:
HAVING total_sales < 100会过滤掉总销售额≥100的产品,若确实需要查询全量产品可删除该条件,若要保留过滤规则需适配空值转换逻辑
修正后的SQL
全量产品销售额查询版本(符合你描述的核心需求)
SELECT p.name, COALESCE(SUM(r.total), 0) AS total_sales FROM product p LEFT JOIN receipt_product rp ON p.product_id = rp.product_id LEFT JOIN receipt r ON rp.receipt_id = r.receipt_id GROUP BY p.name
保留<100过滤条件的版本
如果你确实需要只返回总销售额小于100的产品,可使用以下版本:
SELECT p.name, COALESCE(SUM(r.total), 0) AS total_sales FROM product p LEFT JOIN receipt_product rp ON p.product_id = rp.product_id LEFT JOIN receipt r ON rp.receipt_id = r.receipt_id GROUP BY p.name HAVING total_sales < 100
内容的提问来源于stack exchange,提问作者Thet Paing Htet
相关产品推荐
相关产品推荐

