mysql - UNION ALL LEFT JOIN 和 SUM 返回不正确的值

标签 mysql sum left-join union-all

我尝试根据库存代码获取每个仓库的库存金额,但总金额返回不正确

你能帮我找出我的错误吗?

产品

+----------+-------------+------------+
| barkod   | stokkodu    |  stokadi   |
+----------+-------------+------------+
| 10057    | U-56544547  |   Çocuk    |
| 10312    | U-56548672  |   Gömlek   |
| 14124    | U-56144681  |   Çanta    |
| 18137    | U-56511551  |   Cüzdan   |
| 17859    | U-16511551  |   Gözlük   |
| 10112    | U-56544672  |   Gömlek   |
| 10124    | U-56544681  |   Çanta    |
| 10137    | U-56545551  |   Cüzdan   |
+----------+-------------+------------+

仓库1

+----------+-------------+------+
| barkod   | stokkodu    | adet |
+----------+-------------+------+
| 10111    | U-56544664  |   27 |
| 10112    | U-56544672  |  141 |
| 10124    | U-56544681  |   84 |
| 10137    | U-56545551  |  254 |
+----------+-------------+------+

仓库2

+----------+-------------+------+
| barkod   | stokkodu    | adet |
+----------+-------------+------+
| 10009    | Unknown     |   61 |
| 10112    | U-56544672  |  131 |
| 10124    | U-56544681  |   85 |
| 10137    | U-56545551  |  254 |
+----------+-------------+------+

我试过了

SELECT 
   u.stokkodu, 
   products.stokadi,
   SUM(b.adet) AS stokadet,
   SUM(c.adet) AS sayimadet
   FROM (
      SELECT stokkodu FROM wh1 
      UNION ALL
      SELECT stokkodu FROM wh2 WHERE onay = 1 
   ) u   
   LEFT JOIN (
       SELECT 
          stokkodu, 
          adet 
       FROM wh1 
       GROUP BY stokkodu
   ) b ON u.stokkodu = b.stokkodu
   LEFT JOIN (
       SELECT 
          stokkodu, 
          adet 
       FROM wh2 
       WHERE onay = 1 
       GROUP BY stokkodu
   ) c ON u.stokkodu = c.stokkodu
   LEFT JOIN products ON u.stokkodu = products.stokkodu
GROUP BY u.stokkodu

wh1 和 wh2 可能没有相同的产品

我想要

+----------+-------------+------------+----------+-----------+
| barkod   | stokkodu    |  stokadi   | stokadet | sayimadet |
+----------+-------------+------------+----------+-----------+
| 10111    | U-56544664  |  Gömlek    |     27   |     0     |
| 10112    | U-56544672  |  Gözlük    |     141  |     131   |
| 10124    | U-56544681  |  Ayakkabı  |     84   |     85    |
| 10137    | U-56545551  |  Çanta     |     254  |     254   |
| 10009    | Unknown     |  Unknown   |     0    |     61    |
+----------+-------------+------------+----------+-----------+

谢谢

最佳答案

我通过此查询获得了正确的值

SELECT
d.barkod, 
x.stokkodu,
d.stokadi,
IFNULL(b.stokadet,0) AS "stokadet",
IFNULL(c.adet,0) AS "sayimadet"
FROM (  
     SELECT stokkodu FROM wh1 
     UNION ALL 
     SELECT stokkodu FROM wh2 WHERE onay = 1 
) x 
LEFT JOIN ( 
     SELECT 
     stokkodu, 
     IFNULL(SUM(adet),0) as stokadet 
     FROM wh1 
     GROUP BY stokkodu 
) b ON x.stokkodu = b.stokkodu 
LEFT JOIN ( 
     SELECT 
     stokkodu, 
     IFNULL(SUM(adet),0) as sayimadet 
     FROM wh2 
     WHERE onay = 1 
     GROUP BY stokkodu  
) c ON x.stokkodu = c.StokKodu 
LEFT JOIN products d ON x.stokkodu = d.stokkodu 
GROUP BY x.stokkodu

关于mysql - UNION ALL LEFT JOIN 和 SUM 返回不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53614863/

相关文章:

mysql - 使用 "and"和 "in"

SQL 求和与计数

MySQL 排除和要求

mysql - 加入两个大表很慢

mysql - 使用 Sequelize.js 加入特定列

php - 在 1 个查询中更新给定条件的两列

mysql innodb 缓冲池大小有哪些依赖项

r - 对空集/NA 的 NA 集而不是 0 求和?

mysql - mysql 有条件求和

SQLite LEFT JOIN 和 WHERE 子句混淆