[英]What type of join to use here?
我有兩個表: StorageTransactions
和FutureStockUsageMaterials
。
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.