簡體   English   中英

左外連接返回冗余行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM