如何限制更新到单行

How to limit update to single row

命令

update invoice set unpaid = unpaid - 123
    where regexp_replace(invocienumber, '-.*', '', 'g') ='12345'
returning *

更新所有编号以 12345 开头的发票。

如何解决此问题以便只更新一张发票并取回已更新的发票?

我试过了

update invoice set unpaid = unpaid - 123
    where regexp_replace(invocienumber, '-.*', '', 'g') ='12345'
limit 1
returning *

但是出错了。

正在使用 PostgreSQL 13.2,由 Visual C++ build 1900 编译,64 位

使用 psqlODBC

不漂亮,但这是一种方式:

update invoice 
set unpaid = unpaid - 123
where id = (
     select id from invoice 
     where regexp_replace(invocienumber, '-.*', '', 'g') ='12345'
     limit 1
)
returning * ;

或者,您可以使用 cte 而不是子查询,并与 cte 一起更新您的 table