sql >> データベース >  >> RDS >> Sqlserver

内部結合による SQL Server の更新

    簡略化されたスキーマを示したため、特定の OrderID に対して VarietyID 値が繰り返される理由を特定する情報が欠落していると推測されます。

    複数の行がある場合、SQL Server はそれらの 1 つを更新用に任意に選択します。

    この場合、最初にグループ化する必要があります

    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  
    

    そうでない場合は、OrderID/VarietyID の組み合わせの重複を許可するため、OrderItems テーブルの PK が間違っています (PK は OrderID/VarietyID にするか、これらを一意に制限する必要があります)



    1. すべてのテーブルから行を選択する簡単な方法

    2. 即時実行中の無効な文字エラー

    3. Oracle:ある文字列の任意の部分が別の文字列の任意の部分と一致するLIKE

    4. Barmanを使用したPostgreSQLのバックアップ-概要