PostgreSQL中如何限制UPDATE语句仅更新单行并返回被修改记录
报错原因
PostgreSQL 官方的 UPDATE 语法不支持直接在语句末尾附加 LIMIT 子句,这是你修改后语句执行失败的根本原因。
修正方案
你可以通过子查询先筛选出1条符合条件的目标记录,再针对该记录执行更新操作,以下是可直接运行的示例(假设invoice表的主键字段为id,如果你的表主键名称不同,请替换为对应字段即可):
UPDATE invoice SET unpaid = unpaid - 123 WHERE id = ( SELECT id FROM invoice WHERE regexp_replace(invocienumber, '-.*', '', 'g') = '12345' -- 可选:添加ORDER BY子句指定更新规则,避免随机选取记录 -- 例如按发票号升序取第一条:ORDER BY invocienumber ASC LIMIT 1 ) RETURNING *;
补充说明
- 如果你需要明确指定更新哪一条符合条件的记录(比如优先更新创建时间最早的、未还金额最高的记录),只需要在子查询的
LIMIT 1前添加对应的ORDER BY规则即可,默认不加ORDER BY时数据库会随机选取一条符合条件的记录更新。 - 注意你原语句中的字段名
invocienumber疑似为invoicenumber的拼写错误,如果执行时提示字段不存在可以先核对字段名拼写。
内容的提问来源于stack exchange,提问作者Andrus
相关产品推荐
相关产品推荐

