在firebirdsql中连接三个表

问题描述 投票:2回答:1

我有这样的问题:我想连接三个表,以获得一些值,例如。

Sellers
IDSELLERS
NAMESELLER

STOCK
IDSTOCK
QTYSTOCK
COST
FKSELLER

SELL
IDSELL
QTYSELL
PRICE
FKSELLER

我想求出总金额 STOCKSELL 每个卖家的表格

U have tried with the following query but it doubles the values for each sell:

select
SELLERS.NAMESELLER,
SUM(STOCK.QTY*STOCK.COST)AS STOCKS,
SUM(SELL.QTY*SELL.PRICE) AS SELLS
FROM
SELLERS
LEFT JOIN STOCK ON STOCK.FKSELLER=SELLERS.IDSELLER
LEFT JOIN SELL ON SELL.FKSELLER=SELLERS.IDSELLERS
GROUP BY
SELLERS.NAMESELLER

the firebirdsql release in use is the 2. 1.

先谢谢你了。

sql join firebird
1个回答
3
投票

问题是,如果你有例如2行在 出售 和2行 库存. 第一次连接会产生两行,第二次连接会产生2*2行。相反,你应该将数据联合起来,然后连接一次,或者使用选择表达式来产生总和。

使用选择表达式。

select
  SELLERS.NAMESELLER,
  (select sum(STOCK.QTY * STOCK.COST) 
     from STOCK where STOCK.FKSELLER=SELLERS.IDSELLER) AS STOCKS,
  (select sum(SELL.QTY * SELL.PRICE) 
     from SELL where SELL.FKSELLER=SELLERS.IDSELLERS) AS SELLS
from SELLERS

使用联合。

select 
  SELLERS.NAMESELLER,
  sum(stocksell.STOCKQTY * stocksell.STOCKCOST) AS STOCKS,
  sum(stocksell.SELLQTY * stocksell.SELLPRICE) AS SELLS
from SELLERS
left join (
  select FKSELLER, QTY AS STOCKQTY, COST AS STOCKCOST, 
         0 AS SELLQTY, 0 AS SELLPRICE
  from STOCK
  union all
  select FKSELLER, 0 AS STOCKQTY, 0 AS STOCKCOST, 
         QTY AS SELLQTY, PRICE AS SELLPRICE
  from SELL
) stocksell
  ON stocksell.FKSELLER=SELLERS.IDSELLER
group by SELLERS.NAMESELLER
© www.soinside.com 2019 - 2024. All rights reserved.