Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server-Update mit Inner Join

Meine Vermutung ist, dass, weil Sie uns ein vereinfachtes Schema gezeigt haben, einige Informationen fehlen, die bestimmen würden, warum die wiederholten VarietyID-Werte für eine bestimmte OrderID vorhanden sind.

Wenn Sie mehrere Zeilen haben, wählt SQL Server willkürlich eine davon für die Aktualisierung aus.

In diesem Fall müssen Sie zuerst gruppieren

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  

Wenn nicht, dann ist der PK der OrderItems-Tabelle falsch, weil er doppelte OrderID/VarietyID-Kombinationen zulässt (Der PK sollte OrderID/VarietyID sein, oder diese sollten eingeschränkt eindeutig sein)