[英]left outer join returning redundant rows
我在使用正確數量的股票獲得正確的記錄時遇到問題。
查詢計算“庫存”
select r.id as 'reagent_id',r.name as 'name',s.liquid_quantity as 'liquid_quantity',sum(s.quantity) as 'stock_in_quantity'
from stockin_detail s
left join reagent r on r.id = s.reagent_id
group by r.id,s.liquid_quantity
查詢計算“Stock Out”
select r.id as 'reagent_id',r.name as 'name',s.liquid_quantity as 'liquid_quantity',sum(s.quantity) as 'stock_in_quantity'
from stockout_detail s
left join reagent r on r.id = s.reagent_id
group by r.id,s.liquid_quantity
電流輸出
STOCK IN
REAGENT_ID | REAGENT_NAME | LIQUID_QUANTITY | STOCK_IN_QUANTITY
2 |reagent2 | 30 | 3
2 |reagent2 | 100 | 3
2 |reagent3 | 30 | 2
2 |reagent3 | 100 | 5
STOCK OUT
REAGENT_ID | REAGENT_NAME | LIQUID_QUANTITY | STOCK OUT QUANTITY
2 |reagent2 | 30 | 1
2 |reagent2 | 100 | 2
2 |reagent3 | 30 | 1
2 |reagent3 | 100 | 1
預期產出
REAGENT_ID | REAGENT_NAME | LIQUID_QUANTITY | CURRENT STOCKS
2 |reagent2 | 30 | 2
2 |reagent2 | 100 | 1
2 |reagent3 | 30 | 1
2 |reagent3 | 100 | 4
我嘗試了這個查詢,但它返回了多個冗余記錄,但有一些不正確的值
select i.reagent_id,i.name,i.stock_in_quantity-ifnull(o.stock_out_quantity,0) as 'SYSTEM_STOCK',i.liquid_quantity as 'LIQUID_QUANTITY', ' ' as 'PHYSICAL_COUNT'
from
(
select r.id as 'reagent_id',r.name as 'name',s.liquid_quantity as 'liquid_quantity',sum(s.quantity) as 'stock_in_quantity'
from stockin_detail s
left join reagent r on r.id = s.reagent_id
group by r.id,s.liquid_quantity
) i
left outer join
(
select r.id as 'reagent_id',r.name as 'name',s.liquid_quantity as 'liquid_quantity',sum(s.quantity) as 'stock_out_quantity'
from stockout_detail s
left join reagent r on r.id = s.reagent_id
group by r.id,s.liquid_quantity
) o on i.name = o.name
輸出此查詢
REAGENT_ID | REAGENT_NAME | LIQUID_QUANTITY | CURRENT STOCKS
2 |reagent2 | 30 | 2*
2 |reagent2 | 30 | 1
2 |reagent2 | 100 | 2
2 |reagent2 | 100 | 1*
3 |reagent3 | 30 | 1*
3 |reagent3 | 30 | 1*
3 |reagent3 | 100 | 4*
3 |reagent3 | 100 | 4*
帶星號的值是正確的記錄。 但試劑3的正確記錄是多余的。
嘗試加入兩個表,如下所示:
SELECT SI.REAGENT_ID, SI.REAGENT_NAME, SI.LIQUID_QUANTITY, SI.STOCK_IN_QUANTITY - SO.STOCK_OUT_QUANTITY
FROM STOCK_IN SI INNER JOIN STOCK_OUT SO
ON SI.REAGENT_ID = SO.REAGENT_ID
AND SI.REAGENT_NAME = SO.REAGENT_ID
AND SI.LIQUID_QUANTITY = SO.LIQUID_QUANTITY
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.