Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

on duplicate key update with a condition?

Tags:

sql

mysql

I have something like:

INSERT INTO tbl (count,otherID) VALUES (2,'a') ON DUPLICATE KEY UPDATE count = 2

I would like to update count only if the new value is greater than the current value. So let's say there is already a record with count: 4 and otherID: 'a' that ON DUPLICATE KEY UPDATE count = 3 should not be triggered

How can i achive this?

can i use if? ... UPDATE count = IF (NEWVALUE > count) NEWVALUE else count

like image 285
dynamic Avatar asked Dec 20 '22 22:12

dynamic


2 Answers

Another option:

INSERT INTO tbl (count, otherID) 
  VALUES (2, 'a') 
ON DUPLICATE KEY UPDATE 
  count = GREATEST(VALUES(count), count) ;

Warning: This will fail if the passed value for count is NULL (instead of 2). It will update the column with NULL. So, it's better to use the IF() or a CASE clause.

Unless you prefer the (there goes the elegance ...):

ON DUPLICATE KEY UPDATE 
  count = GREATEST(COALESCE(VALUES(count), count), count) ;
like image 113
ypercubeᵀᴹ Avatar answered Jan 07 '23 06:01

ypercubeᵀᴹ


Haven't tested it, but I think this should work.

INSERT INTO tbl (count, otherID) VALUES(2,'a')
ON DUPLICATE KEY 
UPDATE count = IF(VALUES(count) > count, VALUES(count), count)
like image 45
Eric Petroelje Avatar answered Jan 07 '23 07:01

Eric Petroelje