2017-07-19 11 views
1

複数のクエリを使用して更新するかどうかは、この回答に遭遇したときに対処します。 SQL Statement with multiple SETs and WHEREs複数のクエリとケースの推奨を使用して更新する

と私はこの回答に出くわしましたが、これはお勧めできません。

UPDATE table 
SET ID = CASE WHEN ID = 2555 THEN 111111259 
      WHEN ID =2724 THEN 111111261 
      WHEN ID = 2021 THEN 111111263 
      WHEN ID = 2017 THEN 111111264 
      END 
WHERE ID IN (2555,2724,2021,2017) 

なぜこれはお勧めしませんか?あなたが複数のクエリで複数回ではなく1回だけテーブルを通過しているので、それは良いことではありません。特に大きなテーブルに?

+0

あなたのID列を変更してもよろしいですか?私はそれがあなたの 'PK'だと仮定しています。 –

答えて

0

パフォーマンス面では、違いはありません。高価な部分はIN句で、それは複数のWHERE節より速くはありません。操作する行を見つけるだけでなく、どの行をどの設定で更新するかを選択する必要があるため、速度が遅くなる可能性があります。

これが推奨されない主な理由は、クエリが繰り返し発生し、DRY principleに違反するためです。影響を受ける行のIDを繰り返しているので、バグを招いています。

このバージョンのクエリで何が間違っているのか確認できますか?

UPDATE table 
SET ID = CASE WHEN ID = 2555 THEN 111111259 
      WHEN ID =2724 THEN 111111261 
      WHEN ID = 2021 THEN 111111263 
      WHEN ID = 2017 THEN 111111264 
      END 
WHERE ID IN (2555,2724,2021,2071) 

(ヒント:2017および2071)。

これは、クエリがより複雑でWHERE句を増やすとさらに悪化します。他のwhere句のいずれかが一致しなかったために「影響を受けた3行」しか得られなかったか、 ?

関連する問題