UPDATE table SET x = :x, y = :y, z = IF(x <> :x, NOW(), z);
我需要检查旧的“x”
的值是否与新的“x”
不同。我无法在如上所示的 IF
语句中执行此操作,因为 x
的值已更改,因此它等于 :x
。
基本上,我想做的是:
IF(oldX <> :newX) THEN NOW() ELSE NO CHANGE;
有什么方法可以实现这一点,还是我最好使用子查询或变量来实现这一点? *我绝对更喜欢只执行一个查询。
最佳答案
MySQL 不支持standard对此:
The second assignment in the following statement sets col2 to the current (updated) col1 value, not the original col1 value. The result is that col1 and col2 have the same value. This behavior differs from standard SQL.
UPDATE t1 SET col1 = col1 + 1, col2 = col1;
因此,以下内容适用于简单的 example在 SQL Fiddle 中:
UPDATE table
SET x = if (@x := x, :x, :x),
y = :y,
z = IF(x <> @x, NOW(), z);
如果颠倒顺序,它也应该有效:
UPDATE table
SET z = IF(x <> :x, NOW(), z),
x = :x,
y = :y;
文档说单个表更新“通常”按词汇顺序处理。
关于mysql - 当存储的版本与传递的参数不同时如何更新 MySQL 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21647330/