Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Mise à jour de SQL Server avec jointure interne

Je suppose que parce que vous nous avez montré un schéma simplifié, il manque certaines informations qui détermineraient pourquoi les valeurs VarietyID répétées pour un OrderID donné.

Lorsque vous avez plusieurs lignes, SQL Server en choisira arbitrairement une pour la mise à jour.

Si tel est le cas, vous devez d'abord grouper

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  

Si ce n'est pas le cas, la table OrderItems PK est erronée car elle autorise les combinaisons OrderID/VarietyID en double (la PK doit être OrderID/VarietyID, ou celles-ci doivent être contraintes uniques)