2011-09-02 94 views
0

这个MySQL代码有问题。 它似乎正在返回更多的股票,然后应该有。MySQL多个左连接组由

表位置持有股票获得(多个位置的一个产品) 表orderbody持有订单订购的产品(1个orderheader许多orderbody)

SELECT PRO.ProductID, 
     PRO.ProductCode, 
     SUM(POS.Qty) AS instock, 
     SUM(OB.Qty) AS onorder 
FROM products AS PRO 
LEFT JOIN position AS POS ON POS.ProductID = PRO.ProductID 
LEFT JOIN orderbody AS OB ON OB.ProductID = PRO.ProductID 
WHERE POS.ProductID = OB.ProductID 
GROUP BY PRO.ProductID, POS.ProductID, OB.ProductID 
  • 我得到320的inStock
  • 实际库存数量= 40
  • 位数= 2(每个数量20)

  • 的onOrder = 16数量

  • 实际orderbody = 8个的行数
  • 实际上顺序= 8(每个具有数量= 1)

这是对产品之一

我知道它与团队有关,但我无法解决。

感谢您收到的任何帮助。

回答

0

前几天我有同样的问题。尝试通过从单独的查询中进行选择:SELECT ... FROM products,(SELECT ...)...“您将两个表格左连接在一起,尝试先自己测试子查询,然后尝试(一旦你有你想要的数据,而不是重复的,因为那是你的问题

+2

是运行他们像下面的作品。但我认为有一种方法可以让我像这样做。谢谢回复。 – Ryan

0

你正在选择这个字段PRO.ProductCode,但不是它的分组,猜测它可能是问题。

+0

没有试过,它没有帮助。应该是什么结果是每行产品ID显示一行它的ID,它的代码,什么是当前的库存和目前的订单什么是 产品代码没有以任何其他方式使用,只是出现在桌子上每个productid也有自己的产品代码(唯一我知道重复unnecisary唯一列,但地狱为什么不) – Ryan

+1

很难提供更多的建议,而无需查看数据库结构和一些示例数据。尝试删除组和列的总和和看看被选中的原始数据,看看你是否有更多的东西副本,那么你期望 – bumperbox