两表关联SUM值展示异常,子查询语法报错,求正确SQL语法
修正后的SQL语法及错误说明
核心错误分析
你的SQL存在两个关键语法/逻辑错误:
- 派生表未指定别名:子查询作为
FROM子句的数据源时,必须给它指定一个别名,数据库才能识别它。 - 引用不存在的字段:外层查询试图引用
fabricinventory.sqty和fabricinventory.rcvd,但子查询的结果里只包含issue字段,根本没有这两个字段——外层查询的数据源是子查询的输出,不是原始的fabricinventory表。
针对需求的修正方案
根据你可能的业务需求(计算fabricinventory的sqty/rcvd总和,同时关联requisition的issue总和),提供两种常用场景的修正SQL:
场景1:按buyer_id和file_id分组统计
如果需要按fabricinventory的buyer_id和file_id分组,分别计算每组的发货量、收货量及关联的出库量:
SELECT fi.buyer_id, fi.file_id, SUM(fi.sqty) AS shipped, SUM(fi.rcvd) AS received, SUM(r.issue) AS issue FROM fabricinventory fi INNER JOIN requisition r ON fi.id = r.fab_id GROUP BY fi.buyer_id, fi.file_id;
场景2:统计全局总览数据
如果不需要分组,直接计算所有关联记录的总发货量、总收货量及总出库量:
SELECT SUM(fi.sqty) AS shipped, SUM(fi.rcvd) AS received, SUM(r.issue) AS issue FROM fabricinventory fi INNER JOIN requisition r ON fi.id = r.fab_id;
场景3:必须使用子查询的场景(比如先预计算出库量再关联)
如果你确实需要通过子查询先计算每个fab_id的出库总和,再关联计算发货/收货量:
SELECT SUM(fi.sqty) AS shipped, SUM(fi.rcvd) AS received, SUM(sub.issue) AS total_issue FROM fabricinventory fi INNER JOIN ( SELECT fab_id, SUM(issue) AS issue FROM requisition GROUP BY fab_id ) sub ON fi.id = sub.fab_id -- 若需要按buyer和file分组,取消下面这行注释 -- GROUP BY fi.buyer_id, fi.file_id;
内容的提问来源于stack exchange,提问作者Manik
相关产品推荐
相关产品推荐

