MYSQL从多行中合并两个表
我有两张桌子,一张是所有产品的,另一张是购买新产品的 产品表MYSQL从多行中合并两个表,mysql,vb.net,Mysql,Vb.net,我有两张桌子,一张是所有产品的,另一张是购买新产品的 产品表 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
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
采购表
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
我想显示产品表中的数量,并将采购表
的数量连接到产品表
这是我的初始sql查询
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'`.
但是,它只返回采购表
中的项目,即reserve
我想要达到的是
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
更新
新的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。就查询而言,您几乎达到了要求,只是您需要将保留项目的数量相加,然后使用
分组方式,类似这样
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
谢谢,这很有效。。。虽然他们的专栏并不多,但我完全理解了他们的想法。非常感谢你…@NimitzE。我在你的问题中使用了你自己提供的相同的列名,即使这样,只要你明白了,它也应该是一件小事。很高兴帮助哦,还有一件事,我已经删除了表1中的项目,我应该将where子句
放在哪里?我的意思是,我有一个状态列,它的值被删除,我不想显示那些被删除的项目。如果它在产品
表中,那么你必须在pd.item=pr.item
上的之后添加新的位置
。如果它在purchases
表中,那么您必须在'where status='reserve'之后添加一个新条件谢谢,这是我的第一种查询,这个查询的名称是什么?选择左连接选择?