5

列を条件付きで更新する必要があり、場合によってはまったく更新しないことがあります。これは私がそれを行うことができる最善の方法ですが、列の現在の値で列を更新しているため、ELSEでは効率が悪いようです。ELSEがまったく「何もしない」ことができるより良い方法はありますか?

UPDATE mytable
SET col1 = CASE WHEN (col1 = 20) THEN 10 ELSE col1 END
4

1 に答える 1

5

適用WHERE:

UPDATE mytable
SET col1 = 10  
WHERE col1 = 20

ただし、更新がより複雑で、実際に複数が必要な場合CASEは、箇条書きを噛んでを省略するか、更新WHEREするすべての列を追加する必要があります。WHERE

UPDATE mytable
SET col1 = CASE WHEN (col1 = 20) THEN 10 ELSE col1 END,
SET col2 = CASE WHEN (col2 = 40) THEN 20 ELSE col2 END,
SET col3 = CASE WHEN (col3 = 80) THEN 30 ELSE col3 END
WHERE col1 = 20 OR col2 = 40 OR col3 = 80

これにより、列が不必要に(古い値に)「更新」される可能性がありますが、行は完全ではありません。

于 2013-07-20T21:56:34.323 に答える