sql - 如何将更新限制为单行
问题描述
命令
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 来更新您的表
推荐阅读
- sql - 根据基线行计算百分比/聚合
- python - 文本文件和json文件可以互换使用吗?如果是这样,我如何在 python 中使用它?
- bash - 删除每隔一列之间的空格
- r - 在 R 中使用 qplot 标记点
- material-ui - 使用 Create-React-App + Material UI 组合的 CSS 模块
- java - 如何让 char 表达一个字符串?
- electron - 电子索引数据库限制?
- string - 在python3的数据框列中拆分一个字符串
- python - 包含重复对象的查询集上的 Django .update()
- android - Android如何在不导航回栈的情况下返回主活动?