gpt4 book ai didi

mysql - 这里使用什么类型的连接?

转载 作者:行者123 更新时间:2023-11-29 02:10:13 26 4
gpt4 key购买 nike

我有两个表:StorageTransactionsFutureStockUsageMaterials

StorageTransactions 表显示产品进出存储的所有移动,而 FutureStockUsageMaterials 表显示产品 future 可能进出表的移动.

我编写了以下查询:

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 列,第一列是产品的当前库存,第二列是产品的 future 库存,第三列是产品本身。我的问题是,当 StorageTransactions 表中没有给定产品的条目,但将来应该使用该产品时,此查询不会返回该行,我假设是因为我的加入。

我怎样才能实现所需的行为,即。获得所有将在未来使用的产品?

最佳答案

如果 StorageTransactions 可能有空记录,但 FutureStockUsageMaterials 将始终可用,则将 LEFT JOIN 更改为 RIGHT JOIN .

如果两个表都可能有空记录,那么您需要使用 FULL OUTER JOIN 但不幸的是 FULL OUTER JOIN 在 mysql 中不支持。所以我们需要应用解决方法:

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`

关于mysql - 这里使用什么类型的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54631465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com