MySql:与内部联接相加的总和-错误的结果

问题描述 投票:0回答:1

我有三个不同的表:

  1. 文章
  2. 导入(许多行,其中有很多商品编号,购买日期和购买数量)
  3. 出口(许多行中包含许多商品编号,销售日期和销售数量)

我想为特定的文章知道导入了多少个,导出了多少个,如果可能的话,它们之间的区别,这样结果应该看起来像这样:

102123345, 500, -250, 250

我尝试了以下SQL查询,但总和不正确。它要高得多,似乎是在成倍增加。

SELECT a.Article, b.Article, c.Article, SUM(b.Quantity) AS IMPORT, SUM(c.Quantity) AS EXPORT
FROM sagecl_Article a
INNER JOIN sagecl_import b 
ON a.Article = b.Article
INNER JOIN sagecl_export c 
ON b.Article = c.Article
WHERE a.Article = ?
mysql sql
1个回答
0
投票

您正在沿着两个不同的维度进行汇总。一种解决方案是在加入之前聚合:

SELECT a.Article, i.imports, e.exports,
       (COALESCE(i.imports, 0) - COALESCE(e.exports, 0)) as diff
FROM sagecl_Article a LEFT JOIN
     (SELECT i.Article, SUM(i.Quantity) as imports
      FROM sagecl_import i
      GROUP BY i.Article
     ) i
     ON i.Article = a.Article LEFT JOIN
     (SELECT e.Article, SUM(e.Quantity) as exports
      FROM sagecl_export e
      GROUP BY i.Article
     ) e
     ON e.Article = a.Article 
© www.soinside.com 2019 - 2024. All rights reserved.