Tôi đoán là vì bạn đã cho chúng tôi xem giản đồ đơn giản, nên thiếu một số thông tin có thể xác định lý do tại sao các giá trị VarietyID lặp lại cho một OrderID nhất định.
Khi bạn có nhiều hàng, SQL Server sẽ tùy ý chọn một trong số chúng để cập nhật.
Nếu đúng như vậy, trước tiên bạn cần phải nhóm
UPDATE V
SET
Stock = Stock - foo.SumQuantity
FROM
tblVariety V
JOIN
(SELECT SUM(Quantity) AS SumQuantity, VarietyID
FROM tblOrderItem
JOIN tblOrder ON tblOrderItem.OrderId = tblOrder.OrderId
WHERE tblOrder.OrderId = 1
GROUP BY VarietyID
) foo ON V.VarietyId = foo.VarietyId
Nếu không, thì PK trong bảng OrderItems là sai vì nếu cho phép các kết hợp OrderID / VarietyID trùng lặp (PK phải là OrderID / VarietyID, hoặc các kết hợp này phải là duy nhất)