MySQL - 从2个表中找出平衡图

时间:2009-09-07 08:21:29

标签: sql database mysql

我有2张这样的表:

股票表
product_id bigint(20)
数量漂浮

销售表
product_id bigint(20)
数量漂浮

示例数据
股票表
PRODUCT_ID ---数量
1 --- 10
2 --- 11
3 --- 20
4 --- 50
1 --- 10
3 --- 10

销售表
PRODUCT_ID ---数量
1个--- 2个
2个--- 5个
3 --- 20
4 --- 40
1 --- 7

运行查询后我想要以下输出 PRODUCT_ID ---数量
1 --- 11
2个--- 6个
3 --- 10
4 --- 10

嗯,作为消费者问我正试图更清楚这种情况。

首先,我们认为我存储了 10件产品1
11产品数量2 20件产品3
50件产品4
10件产品1(现在我有20件产品1)
10件产品3(现在我有30件产品3)

其次,我们认为我卖了 2产品数量1 5产品数量2 20件产品3
40件产品4
7产品1的数量(现在我已经销售了9个产品1)

第三,我想知道现在手中有多少股票 11产品数量1(20-9 = 11)
6产品量2(11-5 = 6)
10量产品3(30-20 = 10)
10份产品4(50-4 = 10)

我的问题是:要了解此库存的查询是什么?

先谢谢你回答我的问题。

3 个答案:

答案 0 :(得分:4)

这个答案适用于Oracle - 没有MySql所以无法在那里测试

select product_id, sum(qty) from
(
  select product_id, qty from stock
  union all
  select product_id, (-1 * qty) from sales
) as a
group by prod

答案 1 :(得分:0)

你的问题是缺乏细节,看起来甚至可能在提供的数据中包含拼写错误。尽管您的数据实际上不支持这个(!!!),但我会假设您正在尝试计算库存数量和销售数量之间的差异。看起来您需要以下内容:

select 
    st.product_id,
    sto.qty-st.qty 
from 
    salesTable as st 
    join stockTable as sto on sto.product_id=st.product_id

答案 2 :(得分:0)

克里斯的回答绝对正确。但是对于我想要添加的信息,我在NET上找到了这个信息。

SELECT tunion.product_id, (  
(IFNULL((SELECT SUM(s.qty) FROM stock s WHERE s.product_id=tunion.product_id),0))-  
(IFNULL((SELECT SUM(p.qty) FROM sales p WHERE p.product_id=tunion.product_id),0)))  
AS quantity   
FROM (SELECT DISTINCT s.product_id FROM stock s  
UNION ALL SELECT DISTINCT p.product_id FROM  sales p)  
AS tunion GROUP BY tunion.product_id