Sql 在不丢失返回id的情况下执行多个查询

Sql 在不丢失返回id的情况下执行多个查询,sql,postgresql,Sql,Postgresql,我尝试多次执行此查询 UPDATE product_variation SET stock = (SELECT stock FROM product_variation WHERE id=14) - 1 WHERE id = 14 AND stock >= 1 RETURNING id 但问题是我失去了价值观。我试过工会,但没用。有办法吗 基本上,我必须更新股票号码,当用户购买它,如果数字高于0 我需要返回id,因为我必须告诉用户哪些股票已经完成,他不能购买 因此,id(14)在每个查询

我尝试多次执行此查询

UPDATE product_variation
SET stock = (SELECT stock FROM product_variation WHERE id=14) - 1
WHERE id = 14 AND stock >= 1
RETURNING id
但问题是我失去了价值观。我试过工会,但没用。有办法吗

基本上,我必须更新股票号码,当用户购买它,如果数字高于0 我需要返回id,因为我必须告诉用户哪些股票已经完成,他不能购买
因此,id(14)在每个查询中都会更改,1也可以更改,您不需要选择来获取旧值。要更新多行,请使用WHERE子句选择要更新的所有行,并使用大小写表达式减去该值

UPDATE product_variation
  SET stock = case 
                when id = 14 then stock - 1
                when id = 15 then stock - 4
              end 
WHERE (id = 14 AND stock >= 1)
   or (id = 15 and stock >= 4)
RETURNING id, stock;
或者,您可以提供ID和最低级别的列表:

update product_variation pv
  set stock = stock - t.delta
from (
   values (14, 1), (15, 4), (16, 7)
) as t(id, delta)
where pv.id = t.id
  and pv.stock >= t.delta;

看起来您只与我们共享了部分代码。如果您已经知道
id
值,为什么需要UPDATE语句返回
id
?因为我需要知道字段是否已更新。如果该语句不更新字段,则在运行每个update语句后返回EMPTY。您可以检查该语句更改了多少行。通常称为
ROWCOUNT
,但此参数的名称取决于您的平台。您使用哪种语言调用此更新?