2014-09-30 76 views
0

我遇到了将两个表加在一起的问题,它不断增加我的值“qtyFulfillable”。MySQL加入结果乘以

月1日,当我运行此查询,我得到正确的结果:sumQF = 85

SELECT fbai.id, 
     fbai.sku, 
     CASE WHEN SUM(fbai.qtyFulfillable) > 0 THEN SUM(fbai.qtyFulfillable) ELSE 0 END AS sumQF 
FROM FBAInventory fbai 
WHERE fbai.fbaInventoryReport_id = 62010 
AND  fbai.sku = 'ELO-250030' 
GROUP BY fbai.id 
ORDER BY sumQF DESC 

但是当我开始添加的加盟,我现在得到:sumQF = 14110

SELECT fbai.id, 
     fbai.sku, 
     CASE WHEN SUM(fbai.qtyFulfillable) > 0 THEN SUM(fbai.qtyFulfillable) ELSE 0 END AS sumQF, 
     CASE WHEN SUM(fbas.quantityShipped) > 0 THEN SUM(fbas.quantityShipped) ELSE 0 END as sumQS 
FROM FBAInventory fbai 
LEFT JOIN FBAShipment fbas 
ON fbai.sku = fbas.sku 
WHERE fbai.fbaInventoryReport_id = 62010 
AND  fbai.sku = 'ELO-250030' 
GROUP BY fbai.id 
ORDER BY sumQF DESC 

出于某种原因,SQL采取的行中的“FBAS”表的总数目(连接表),166行,和乘法85×166 = 14110

我需要做什么才能够加入这个表格,但是不能将我的结果乘以连接表格中的总行数。谢谢!

+2

您使用的是MySQL还是SQL Server?请不要使用两个完全不同的数据库平台进行标记,除非您真的使用两种方法。 – 2014-09-30 16:54:29

+0

如果FBAInventory有85条记录,SKU ='ELO-250030',那么对于这85行中的每一行,它都会尝试加入FBAShipment中具有相同sku的行。在连接的“ON”子句中,必须有一些其他字段对。 – 2014-09-30 16:55:57

+0

是否将fbas.sku添加到'GROUP BY'子句修复它?即'GROUP BY fbai.id,fbas.sku' – Ruslan 2014-09-30 16:56:14

回答

0

您可以总结第二个数量在一个单独的查询和JOIN它我也喜欢用GREATEST而不是你的CASE陈述。

SELECT fbai.id, 
      fbai.sku, 
      GREATEST(SUM(fbai.qtyFulfillable),0) sumQF, 
      COALESCE(fbas_sum.value,0) sumQS /* COALESCE in case no rows */ 
     FROM FBAInventory fbai 
LEFT JOIN (
     SELECT sku, 
       GREATEST(SUM(quantityShipped),0) value 
      FROM FBAShipment 
     GROUP BY sku 
      ) fbas_sum 
     ON fbas_sum.sku=fbai.sku 
    WHERE fbai.fbaInventoryReport_id=62010 
     AND fbai.sku='ELO-250030' 
    GROUP BY id, sku, sumQS /* Added other non-aggregates for sanity */ 
    ORDER BY sumQF DESC 

您确定要对id进行分组吗?我假设id是表的主键,所以应该只有一行来总结。