sql >> Base de Datos >  >> RDS >> Sqlserver

Actualización de SQL Server con unión interna

Supongo que debido a que nos ha mostrado un esquema simplificado, falta cierta información que determinaría por qué se repiten los valores de VarietyID para un OrderID determinado.

Cuando tiene varias filas, SQL Server elegirá arbitrariamente una de ellas para la actualización.

Si este es el caso, primero debe agruparse

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  

De lo contrario, el PK de la tabla OrderItems es incorrecto porque permite combinaciones duplicadas de ID de pedido/ID de variedad (el PK debe ser ID de pedido/ID de variedad, o estos deben ser únicos restringidos)