4

私は次のようなものを持っています:

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

4

2 に答える 2

6

別のオプション:

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

警告:に渡された値countNULL(ではなく2) である場合、これは失敗します。で列を更新しますNULLIF()そのため、 orCASE句を使用することをお勧めします。

あなたが好まない限り(エレガンスがあります...):

ON DUPLICATE KEY UPDATE 
  count = GREATEST(COALESCE(VALUES(count), count), count) ;
于 2012-04-27T16:35:08.840 に答える
5

テストしていませんが、これでうまくいくはずです。

INSERT INTO tbl (count, otherID) VALUES(2,'a')
ON DUPLICATE KEY 
UPDATE count = IF(VALUES(count) > count, VALUES(count), count)
于 2012-04-27T16:32:17.523 に答える