Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Atualização do SQL Server com Inner Join


Meu palpite é que, como você nos mostrou o esquema simplificado, faltam algumas informações que determinariam por que os valores de VarietyID repetidos para um determinado OrderID.

Quando você tiver várias linhas, o SQL Server escolherá arbitrariamente uma delas para a atualização.

Se este for o caso, você precisa primeiro agrupar
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  

Caso contrário, o PK da tabela OrderItems está errado porque se permite combinações duplicadas de OrderID/VarietyID (O PK deve ser OrderID/VarietyID, ou estes devem ser exclusivos restritos)