我有类似的东西:
INSERT INTO tbl (count,otherID) VALUES (2,'a') ON DUPLICATE KEY UPDATE count = 2
我想仅在新值大于当前值时才更新计数。所以,假设已有记录有计数:4和其他ID:'a'ON DUPLICATE KEY UPDATE count = 3
不应被触发
我怎么能做到这一点?
我可以使用if吗?... UPDATE count = IF (NEWVALUE > count) NEWVALUE else count
答案 0 :(得分:5)
另一种选择:
INSERT INTO tbl (count, otherID)
VALUES (2, 'a')
ON DUPLICATE KEY UPDATE
count = GREATEST(VALUES(count), count) ;
警告:如果count
的传递值为NULL
(而不是2
),则会失败。它将使用NULL
更新列。因此,最好使用IF()
或CASE
子句。
除非你更喜欢(优雅......):
ON DUPLICATE KEY UPDATE
count = GREATEST(COALESCE(VALUES(count), count), count) ;
答案 1 :(得分:3)
没有测试过,但我认为这应该可行。
INSERT INTO tbl (count, otherID) VALUES(2,'a')
ON DUPLICATE KEY
UPDATE count = IF(VALUES(count) > count, VALUES(count), count)