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

glu*_*utz 5 mysql sql performance

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

UPDATE mytable
SET col1 = CASE WHEN (col1 = 20) THEN 10 ELSE col1 END
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 5

申请一个WHERE

UPDATE mytable
SET col1 = 10  
WHERE col1 = 20
Run Code Online (Sandbox Code Playgroud)

但是,如果您的更新更复杂并且您实际上需要多个,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
Run Code Online (Sandbox Code Playgroud)

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

  • 但是,如果`UPDATE`比较复杂,并且需要更新不受这个`WHERE`子句限制的其他列,那么他的原始方法是这样做的。 (2认同)