簡體   English   中英

在這里使用什么類型的連接?

[英]What type of join to use here?

我有兩個表: StorageTransactionsFutureStockUsageMaterials

StorageTransactions表顯示了產品進出存儲的所有移動,而FutureStockUsageMaterials表顯示了未來產品FutureStockUsageMaterials表的可能移動。

我編寫了以下查詢:

SELECT 
 SUM(StorageTransactions.Quantity) as CurrentStock, 
 COALESCE(FutureStockUsageMaterials.FutureStock, 0) as FutureStock,
 StorageTransactions.products_ProductId 
FROM StorageTransactions 
   LEFT JOIN FutureStockUsageMaterials 
   ON FutureStockUsageMaterials.products_ProductId = StorageTransactions.products_ProductId 
 GROUP BY StorageTransactions.products_ProductId`

例如,如果將來使用產品ID為3的產品,但在舊交易中沒有它的記錄,我想看到的是這樣的一行:

CurrentStock  |  FutureStock  | products_ProductId
0             |  -325.00      | 3

此查詢按預期工作,如顯示 3 列,第一列是產品的當前庫存,第二列是產品的未來庫存,第三列是產品本身。 我的問題是,當StorageTransactions表中沒有給定產品的條目,但將來應該使用該產品時,此查詢不會返回該行,我假設是因為我的加入。

我怎樣才能實現所需的行為,即。 獲得所有將在未來使用的產品?

如果StorageTransactions可能FutureStockUsageMaterials記錄但FutureStockUsageMaterials將始終可用,則將LEFT JOIN更改為RIGHT JOIN

如果兩個表都可能有空記錄,那么您需要使用FULL OUTER JOIN但不幸的是,mysql 不支持FULL OUTER JOIN 所以我們需要應用解決方法:

SELECT 
 SUM(StorageTransactions.Quantity) as CurrentStock, 
 COALESCE(FutureStockUsageMaterials.FutureStock, 0) as FutureStock,
 StorageTransactions.products_ProductId 
FROM StorageTransactions 
   LEFT JOIN FutureStockUsageMaterials 
   ON FutureStockUsageMaterials.products_ProductId = StorageTransactions.products_ProductId 
 GROUP BY StorageTransactions.products_ProductId`
UNION 
SELECT 
 SUM(StorageTransactions.Quantity) as CurrentStock, 
 COALESCE(FutureStockUsageMaterials.FutureStock, 0) as FutureStock,
 StorageTransactions.products_ProductId 
FROM StorageTransactions 
   RIGHT JOIN FutureStockUsageMaterials 
   ON FutureStockUsageMaterials.products_ProductId = StorageTransactions.products_ProductId 
 GROUP BY StorageTransactions.products_ProductId`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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