2015-10-15 75 views
0

我有两个表,一个是所有产品,另一个是用于新购买的产品。MYSQL梳理两个表从多个行

产品表

Item Qty 
301  2 
302  5 
303  3 
304  4 
305  6 

采购表

Item  Qty Status Date 
302  5  used  09-15-2015 
303  5  reserve 09-20-2015 
301  5  used  09-20-2015 
302  5  reserve 09-20-2015 
304  5  used  10-15-2015 
303  5  reserve 10-15-2015 

我想在产品表中显示多少数量,并加入的purchases table的数量Product Table

这是我最初的SQL查询y

SELECT product_name, product_quantity, quantity 
FROM products 
    LEFT OUTER JOIN purchases ON products.ID = purchases.product_ID 
WHERE product_status !='deleted' AND status != 'used'`. 

但是,它只返回purchases table的项目,即保留项。

我想要实现的是

Item Qty Reserved Qty Total 
301  2  0     2 
302  5  5     10 
303  3  10    13 
304  4  0     4 
305  6  0     6 

UPDATE 新的SQL查询

SELECT product_name, product_quantity, p.quantity 
FROM products 
    LEFT OUTER JOIN (SELECT * FROM purchases 
     WHERE status = 'reserved' 
     GROUP BY product_ID) AS p ON p.product_ID = products.ID 
WHERE products.product_status !='deleted'` 

但它在保留数量返回0。

回答

0

你几乎没有不同之处在于,你需要总结的保留项目的数量,然后用GROUP BY,有点像这个

SELECT 
    pd.item AS 'Item', pd.qty AS 'Qty', IFNULL(pr.reserved_quantity, 0) AS 'Reserved Qty', (pd.qty+IFNULL(pr.reserved_quantity, 0)) AS 'Total' 
FROM 
    product pd 
    LEFT OUTER JOIN (SELECT item, SUM(qty) AS 'reserved_quantity' FROM purchases WHERE `status`='reserve' GROUP BY 1) AS pr ON pd.item=pr.item 
+0

由于它的工作原理......虽然他们有一些列的查询方面这并不多,我明白了。非常感谢你... –

+0

@NimitzE。我在你的问题中使用了与你自己提供的相同的列名,即使这样,只要你明白,它应该是一件小事。很高兴帮助 – mynawaz

+0

哦,还有一件事,我删除了表1中的项目,我应该在哪里放置'where子句'?我的意思是,我有一个状态栏,它的值被删除,我不想显示这些删除的项目。 –