如何在SQL case语句中什么都不做?

时间:2013-07-20 21:55:17

标签: mysql sql performance

我需要有条件地更新列,在某些情况下根本不更新它。这是我能想到的最佳方式,但似乎它在ELSE中可能效率低下,因为它仍然使用列的当前值更新列。有没有更好的方式让ELSE可以“什么也不做”。

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

1 个答案:

答案 0 :(得分:4)

申请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

这可能仍然不必要地“更新”列(对于它们的旧值)但不是完整的行。