Postgresql 仅当大于最小值时才递减postgres中的整数
我有一个这样的语句,我用它来递减计数器:Postgresql 仅当大于最小值时才递减postgres中的整数,postgresql,Postgresql,我有一个这样的语句,我用它来递减计数器: UPDATE stats SET counter = counter - 1 WHERE id = 24235; 问题是,我从不希望计数器低于1。如何执行update语句,该语句将只递减到1 PG版本9.3 UPDATE stats SET counter = counter - 1 WHERE id = 24235 AND counter > 1; 如果递减量不同,则必须确保在两个位置传递相同的值 UPDATE stats SET cou
UPDATE stats SET counter = counter - 1 WHERE id = 24235;
问题是,我从不希望计数器低于1
。如何执行update语句,该语句将只递减到1
PG版本9.3
UPDATE stats
SET counter = counter - 1
WHERE id = 24235
AND counter > 1;
如果递减量不同,则必须确保在两个位置传递相同的值
UPDATE stats
SET counter = counter - ?
WHERE id = ?
AND counter > ?;
您可以使用一些伪代码调用它,比如sql.execute(decrement,id,decrement)
如果计数器永远不应该低于1,我会在该字段上添加一个约束<代码>计数器整数检查(计数器>0)另一种方法
UPDATE stats SET counter = (
CASE WHEN counter > 1
THEN (counter - 1)
ELSE 1 END
) WHERE id = 24235;
请问是什么版本的Postgres?我和你一样被迷惑了,走上了条件编程的道路,寻找一个特殊的Postgres IF语句。一个WHERE条件就可以了。对于更改一行,这是可以的。如果您要更改很多行,其中很大一部分可能已经有计数器位于1,我很想知道Postgres是否足够聪明,能够利用计数器上的索引。