0

レコードのリストで更新を実行し、いくつかの計算に基づいて列を変更しようとしました。これは私のクエリです (私のクエリは実際に NET と VAT への金額の再分配を行います):

update transaction_details
set amount = (
    CASE WHEN id = x.netID THEN x.calculated_NET
         WHEN id = x.vatID THEN x.calculated_VAT
    END
    )
from
    (select
        d1.id as 'netHmy',
        d2.id as 'vatHmy',
        round(((d1.amount + d2.amount )/1.18) * 0.18, 2) 'calculated_VAT',
        round((d1.amount + d2.amount )/1.18, 2) 'calculated_NET'
    from transaction_details d1 join transaction_details d2 on d1.id = d2.netID
    where
        1 = 1
        -- multiple conditions
                              ) as x

X テーブルに選択されたレコードは ですが175、このクエリを実行すると、transaction_details テーブル全体 (4.000.000 レコード以上) に渡ります。

クエリの操作の順序は次のとおりであることを知っています

1. FROM clause
2. WHERE clause
3. GROUP BY clause
4. HAVING clause
5. SELECT clause
6. ORDER BY clause

そのため、更新された結果が選択された 175 レコードに制限されることを期待していましたが、どうやらそれはテーブル全体に及んでおり、結果は4.354.665 rows affected.

UPDATE ステートメントでは操作の順序が異なりますか? または、クエリを再設計する必要がありますか?

4

1 に答える 1