使用 join 更新只执行一个
Update using join executes only ones
我有一个有两行的 table。这些行使用相同的 ItemID 但不同的 Quantity 和 RowID。
当我执行如下所示的查询时,代码似乎只运行一次:
这是我的查询:
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
你需要在这里聚合。很可能是这样的:
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;
注意我也使用有意义的别名。不要使用 t1
、t2
、t3
等别名,因为它们毫无意义且不一致。参见 Bad Habits to Kick : Using table aliases like (a, b, c) or (t1, t2, t3)
我有一个有两行的 table。这些行使用相同的 ItemID 但不同的 Quantity 和 RowID。
当我执行如下所示的查询时,代码似乎只运行一次:
这是我的查询:
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
你需要在这里聚合。很可能是这样的:
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;
注意我也使用有意义的别名。不要使用 t1
、t2
、t3
等别名,因为它们毫无意义且不一致。参见 Bad Habits to Kick : Using table aliases like (a, b, c) or (t1, t2, t3)