仅当大于最小值时才减少postgres中的整数

时间:2015-01-19 18:26:55

标签: postgresql

我有这样的陈述,我用来递减一个柜台:

UPDATE stats SET counter = counter - 1 WHERE id = 24235;

问题是,我新手希望计数器低于1。如何执行更新语句,只会递减到1

PG版本9.3

2 个答案:

答案 0 :(得分: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,我会在该字段上添加约束。 counter INTEGER CHECK (counter > 0)

答案 1 :(得分:3)

另一种方式......

UPDATE stats SET counter = (
  CASE WHEN counter > 1 
  THEN (counter - 1) 
  ELSE 1 END
) WHERE id = 24235;