Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Aggiornamento di SQL Server con inner join

La mia ipotesi è che, poiché ci hai mostrato uno schema semplificato, mancano alcune informazioni che determinerebbero il motivo per cui i valori VarietyID ripetuti per un determinato OrderID.

Quando hai più righe, SQL Server ne sceglierà una per l'aggiornamento in modo arbitrario.

In questo caso, devi prima raggruppare

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  

In caso contrario, la tabella PK OrderItems è errata perché se consente combinazioni OrderID/VarietyID duplicate (il PK dovrebbe essere OrderID/VarietyID, oppure questi dovrebbero essere vincolati univoci)