【问题标题】:MySQL query from 3 tables来自 3 个表的 MySQL 查询
【发布时间】:2012-07-13 10:47:02
【问题描述】:

假设我有 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   |
---------------------------------

【问题讨论】:

  • SELECT product.pid, pname, SUM(stock.qty) FROM product LEFT OUTER JOIN stock ON product.pid = stock.pid GROUP BY product.pid, pname 从 stock 表中获取但想减去从第二个开始。

标签: mysql sql


【解决方案1】:

您可以执行以下操作:请参阅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

【讨论】:

    猜你喜欢
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 2019-07-06
    • 2013-09-19
    • 2022-01-09
    • 2014-03-17
    相关资源
    最近更新 更多