2012-04-27 168 views
1

我有類似:重複密鑰更新的條件?

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

我想只有當新值大於當前值的更新計數。所以我們假設已經有一個count:4和otherID的記錄:'a'表示ON DUPLICATE KEY UPDATE count = 3不應該被觸發

我該如何執行此操作?

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

+0

是這兩個目前存在的價值:'2'和'3'?或者這是一個錯字,他們是一樣的? – 2012-04-27 16:36:03

+0

相同的值..... – dynamic 2012-04-27 16:36:46

回答

3

另一種選擇:

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) ; 
+0

更清晰........ – dynamic 2012-04-27 16:39:50

+0

@職場英語對話:不,這不是最好的。看我的編輯。 – 2012-04-27 16:44:15

+0

我的col不是NULL,所以我沒有這個問題 – dynamic 2012-04-27 16:48:10

2

沒有測試過,但我認爲這應該工作。

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

它的工作....... – dynamic 2012-04-27 16:34:17