2

假设我有 3 张桌子,比如..

____________
|pid |pname|
| 1  |  a  |
| 2  |  b  |
| 3  |  c  |
------------
product

____________
|pid | qty |
| 1  |  5  |
| 2  |  8  |
| 1  |  5  |
------------
stock

____________
|pid | qty |
| 2  |  4  |
| 1  |  3  |
| 1  |  2  |
------------
sale

现在我想首先从产品表中选择快速项目(a)然后选择总数量。库存表和销售表中的项目,并从库存数量的总数和销售数量的总数中减去该值。就像这个例子——

________________________________
|pname |  Stock | Sale | remain |
|  A   |   10   |  5   |    5   |
|  B   |   8    |  4   |    4   |
|  C   |   0    |  0   |    0   |
---------------------------------
4

1 回答 1

4

您可以执行以下操作:参见SQL Fiddle with Demo

select p.pname
  , st.TotalStock
  , sl.TotalSale
  , st.TotalStock - sl.TotalSale as Remain
from product p
inner join 
(
  select pid, sum(qty) as TotalStock
  from stock 
  group by pid
) st
  on p.pid = st.pid
inner join
(
  select pid, sum(qty) as TotalSale
  from sale
  group by pid
) sl
  on p.pid = sl.pid

将为您提供所有表中存在的INNER JOIN记录,但如果您想查看仅存在于某些表中的记录,请使用LEFT JOIN(请参阅SQL Fiddle

select p.pname
  , ifnull(st.TotalStock, 0) as TotalStock
  , ifnull(sl.TotalSale, 0) as TotalSale
  , ifnull(st.TotalStock, 0) - ifnull(sl.TotalSale, 0) as Remain
from product p
left join 
(
  select pid, sum(qty) as TotalStock
  from stock 
  group by pid
) st
  on p.pid = st.pid
left join
(
  select pid, sum(qty) as TotalSale
  from sale
  group by pid
) sl
  on p.pid = sl.pid
于 2012-07-13T10:58:09.087 回答