Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Aktualizacja serwera SQL z wewnętrznym złączem

Domyślam się, że ponieważ pokazałeś nam uproszczony schemat, brakuje niektórych informacji, które określiłyby, dlaczego powtarzające się wartości VarietyID dla danego OrderID.

Jeśli masz wiele wierszy, SQL Server arbitralnie wybierze jeden z nich do aktualizacji.

W takim przypadku musisz najpierw pogrupować

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  

Jeśli nie, to tabela OrderItems PK jest błędna, ponieważ jeśli zezwala na zduplikowane kombinacje OrderID/VarietyID (PK powinien być OrderID/VarietyID lub powinny być one ograniczone unikatowo)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie możesz użyć tymczasowej kolumny w klauzuli where?

  2. Uwaga użytkownicy korzystający z SQL Server 2008 i SQL Server 2008 R2

  3. Jak obliczyć kwadrat w SQL Server

  4. KWADRAT() Przykłady w SQL Server

  5. Jak działa SET ROWCOUNT w SQL Server