是否有可能做到在MySQL的UPDATE查询,其更新域值只有当某些条件得到满足? 事情是这样的:
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 something = 1, field = IF(condition is true, 1, field) WHERE id = 123
这样做是设置“场”为1(像OP用作示例)如果满足条件,并使用“场”的当前值,如果没有得到满足。 使用前值是一样的不改变,所以你去。
试试这个:
UPDATE test
SET
field = 1
WHERE id = 123 and condition
另一种解决方案,我们可以使用MySQL IF()
条件函数:
UPDATE test
SET field = IF(something == 1{CONDITION}, 1 {NEW VALUE}, field)
WHERE `id` = 5
另一个变化:
UPDATE test
SET field = IF ( {condition}, {new value}, field )
WHERE id = 123
这将更新field
与{new value}
只有{condition}
满足