MySQL:只有满足条件时才更新字段
是否有可能做一个MySQL更新查询,只有在满足某些条件时才更新字段值? 像这样的东西:
UPDATE test SET CASE WHEN true THEN field = 1 END WHERE id = 123
换一种说法:
UPDATE test SET something = 1, /*field that always gets updated*/ CASE WHEN true THEN field = 1 /*field that should only get updated when condition is met*/ END WHERE id = 123
什么是正确的方法来做到这一点?
是!
在这里你有另一个例子:
UPDATE prices SET final_price= CASE WHEN currency=1 THEN 0.81*final_price ELSE final_price END
这是有效的,因为MySQL不更新行,如果没有更改, 如文档中所述 :
如果您将列设置为当前的值,MySQL会注意到这一点,并不会更新它。
尝试这个:
UPDATE test SET field = 1 WHERE id = 123 and condition
在我看来,另一个更容易阅读的解决scheme是:
UPDATE test SET something = 1, field = IF(condition is true, 1, field) WHERE id = 123
如果满足条件,则将“field”设置为1(如OP用作示例),如果不满足,则使用“field”的当前值。 使用以前的值是不变的,所以你去。
另一个变化:
UPDATE test SET field = IF ( {condition}, {new value}, field ) WHERE id = 123
只有满足{condition}
才会用{new value}
更新field