如何修复使用'Monitor'而非ID查询显示器采购记录的错误SQL语句
问题原因
你的SQL存在两个核心错误,导致统计结果异常:
- 未添加
Products和Orders两张表的关联条件,使用逗号分隔表的隐式连接方式会直接生成笛卡尔积,相当于Products中所有name='Monitor'的记录会和Orders里的全部订单记录逐一匹配,最终统计出来的是全量订单的数量总和 - 使用了
sum()聚合函数,但select子句中的非聚合字段name、Price没有对应添加GROUP BY子句,不符合聚合查询的语法规范,即使数据库非严格模式下可以执行,返回的结果也不符合预期
修复方案
如果你需要统计各款显示器的总采购量,使用以下修正后的SQL(注意如果你的表中关联产品的字段名不是product_id,替换成你实际的关联字段即可):
SELECT p.name, p.Price, SUM(o.quantity) AS total_purchase_quantity FROM Products p INNER JOIN Orders o ON p.product_id = o.product_id WHERE p.name = 'Monitor' GROUP BY p.name, p.Price;
如果你需要查询每一条显示器的采购明细记录,不需要统计总和,使用以下SQL:
SELECT p.name, p.Price, o.quantity, o.order_id -- 可自行补充需要展示的订单字段 FROM Products p INNER JOIN Orders o ON p.product_id = o.product_id WHERE p.name = 'Monitor';
内容的提问来源于stack exchange,提问作者Marie Kina
相关产品推荐
相关产品推荐

