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フィドルを参照してください。

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 JOINSQL 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 に答える