【发布时间】:2011-03-28 22:27:18
【问题描述】:
我有 3 张表(简化版):
tblOrder(OrderId INT)
tblVariety(VarietyId INT,Stock INT)
tblOrderItem(OrderId,VarietyId,Quantity INT)
如果我下订单,我会使用以下方式降低库存水平:
UPDATE tblVariety
SET tblVariety.Stock = tblVariety.Stock - tblOrderItem.Quantity
FROM tblVariety
INNER JOIN tblOrderItem ON tblVariety.VarietyId = tblOrderItem.VarietyId
INNER JOIN tblOrder ON tblOrderItem.OrderId = tblOrder.OrderId
WHERE tblOrder.OrderId = 1
一切正常,直到 tblOrderItem 中有两行具有相同的 VarietyId 用于相同的 OrderId。在这种情况下,只有其中一行用于库存更新。它似乎正在以某种方式在其中进行 GROUP BY VarietyId。
谁能解释一下?非常感谢。
【问题讨论】:
-
应该不可能有相同的品种/订单组合?也就是说,如果一个订单的同一个品种出现 >1,那么这被捕获在数量列中,而不是多行?
-
从技术上讲,是的。但是 tblOrderItem 中还有其他列,这意味着可以使用相同的基本数字(例如日期字段)进入多行
标签: sql sql-server-2005 tsql join