MySQL LEFT JOIN查询报错:求A类产品无折扣销量的SQL语句修复求助
问题排查与修正方案
原SQL错误点
- 子查询中
SUM(qty)前多了一个未闭合的多余左括号,不符合SQL语法规范,直接触发编译报错 - 子查询仅返回了求和后的
non_disc_qty字段,没有包含关联所需的product_id字段,后续使用USING (product_id)做关联时无法匹配到对应字段,也会触发报错 - 最后过滤条件的
category字段未加表别名,若两张表存在同名字段会出现歧义报错,属于不规范写法
修正后的SQL
SELECT pc.product_id, s.non_disc_qty FROM productcategory pc LEFT JOIN ( SELECT product_id, SUM(qty) AS non_disc_qty FROM sale WHERE discount = 0 GROUP BY product_id ) AS s USING (product_id) WHERE pc.category = 'A';
可选优化
如果需要让没有无折扣销售记录的产品,总数量显示为0而非NULL,可以使用COALESCE函数处理:
SELECT pc.product_id, COALESCE(s.non_disc_qty, 0) AS non_disc_qty FROM productcategory pc LEFT JOIN ( SELECT product_id, SUM(qty) AS non_disc_qty FROM sale WHERE discount = 0 GROUP BY product_id ) AS s USING (product_id) WHERE pc.category = 'A';
内容的提问来源于stack exchange,提问作者Simon S.
相关产品推荐
相关产品推荐

