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