有条件的重复密钥更新?

dyn*_*mic 2 mysql sql

我有类似的东西:

INSERT INTO tbl (count,otherID) VALUES (2,'a') ON DUPLICATE KEY UPDATE count = 2
Run Code Online (Sandbox Code Playgroud)

我想仅在新值大于当前值时才更新计数.所以我们说已经有一个记录有count:4和otherID:'a'不ON DUPLICATE KEY UPDATE count = 3应该被触发

我怎么能做到这一点?

我可以使用吗? ... UPDATE count = IF (NEWVALUE > count) NEWVALUE else count

Eri*_*lje 5

还没有测试过,但我认为这应该有效。

INSERT INTO tbl (count, otherID) VALUES(2,'a')
ON DUPLICATE KEY 
UPDATE count = IF(VALUES(count) > count, VALUES(count), count)
Run Code Online (Sandbox Code Playgroud)


ype*_*eᵀᴹ 5

另外一个选项:

INSERT INTO tbl (count, otherID) 
  VALUES (2, 'a') 
ON DUPLICATE KEY UPDATE 
  count = GREATEST(VALUES(count), count) ;
Run Code Online (Sandbox Code Playgroud)

警告:如果传递的值这将失败countNULL(代替2).它将使用更新列NULL.因此,最好使用IF()或者一个CASE子句.

除非你更喜欢(有优雅......):

ON DUPLICATE KEY UPDATE 
  count = GREATEST(COALESCE(VALUES(count), count), count) ;
Run Code Online (Sandbox Code Playgroud)