使用 join 更新仅执行

发布于 2025-01-10 10:13:05 字数 449 浏览 0 评论 0原文

我有一张有两行的桌子。这些行使用相同的 ItemID 但不同的 Quantity 和 RowID。

当我执行下面所示的查询时,代码似乎只运行一次:

Image

这是我的查询:

Update t1 
Set t1.Stock = t1.Stock + t2.Quantity
From Inventory t1 
Join InventoryTrans t2 On t1.ItemID = t2.ItemID  
Where t2.RowID In (26221, 26222) 

我的预期库存结果应该是 3。但由于某种原因是 1

I have a table with two rows. These rows using same ItemID but different Quantity and RowID.

When I execute the query shown below, it seems that code runs only once:

Image

Here is my query:

Update t1 
Set t1.Stock = t1.Stock + t2.Quantity
From Inventory t1 
Join InventoryTrans t2 On t1.ItemID = t2.ItemID  
Where t2.RowID In (26221, 26222) 

My expected result in stock should be 3. But for some reason is 1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情栀口红 2025-01-17 10:13:05

你需要在这里聚合。最有可能的是:

UPDATE I
SET Stock = I.Stock + IT.TotalQuantity
FROM dbo.Inventory I
     CROSS APPLY (SELECT SUM(Quantity) AS TotalQuantity
                  FROM dbo.InventoryTrans ca
                  WHERE ca.ItemID = I.ItemID
                    AND ca.RowID In (26221, 26222)
                  GROUP BY ca.ItemID) IT;

注意我也使用有意义的别名。不要使用 t1t2t3 等别名,因为它们没有意义并且不一致。请参阅 要改掉的坏习惯:使用表别名,如 (a, b, c) 或 (t1, t2, t3)

You need to aggregate here. Most likely this:

UPDATE I
SET Stock = I.Stock + IT.TotalQuantity
FROM dbo.Inventory I
     CROSS APPLY (SELECT SUM(Quantity) AS TotalQuantity
                  FROM dbo.InventoryTrans ca
                  WHERE ca.ItemID = I.ItemID
                    AND ca.RowID In (26221, 26222)
                  GROUP BY ca.ItemID) IT;

Note I also use meaningful aliases. Don't use aliases it's t1, t2, t3, as they are meaningless and won't be consistent. See Bad Habits to Kick : Using table aliases like (a, b, c) or (t1, t2, t3)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文