【问题标题】:How to do nothing in an SQL case statement?如何在 SQL 案例语句中什么都不做?
【发布时间】:2013-07-20 21:55:16
【问题描述】:

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

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

【问题讨论】:

    标签: mysql sql performance


    【解决方案1】:

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

    这可能仍会不必要地“更新”列(更新为旧值),但不会完成行。

    【讨论】:

    • 但是,如果UPDATE比较复杂,需要更新其他不受这个WHERE子句限制的列,他原来的方法就是这样做的。
    • 更新更复杂。正如@Barmar 所说。我需要在 1 条语句中进行多次更新。所以每个案例都不需要自己做任何事情。
    • @glutz:那么你的 sql 是错误的,你应该展示一个更好的示例。但是,如果它更复杂,我也会使用CASE 的方法。不过,您的问题并未暗示这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 2014-10-08
    相关资源
    最近更新 更多