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
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) ;
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With