मेरा अनुमान है कि चूंकि आपने हमें सरलीकृत स्कीमा दिखाया है, इसलिए कुछ जानकारी गायब है जो यह निर्धारित करेगी कि किसी दिए गए ऑर्डर आईडी के लिए बार-बार VarietyID मान क्यों हैं।
जब आपके पास एक से अधिक पंक्तियाँ हों, तो SQL सर्वर मनमाने ढंग से उनमें से एक को अपडेट के लिए चुन लेगा।
अगर ऐसा है, तो आपको पहले समूह बनाना होगा
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
यदि नहीं, तो ऑर्डरइटम तालिका पीके गलत है क्योंकि यदि डुप्लिकेट ऑर्डरआईडी/वैराइटीआईडी संयोजनों की अनुमति देता है (पीके ऑर्डरआईडी/वैराइटीआईडी होना चाहिए, या इन्हें अद्वितीय बाध्य किया जाना चाहिए)