首页 > 解决方案 > 如何将更新限制为单行

问题描述

命令

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

标签: sqlpostgresqlsql-updatelimitpsqlodbc

解决方案


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

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

或者,您可以使用 cte 而不是子查询并加入 cte 来更新您的表


推荐阅读