You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何实现查询指定行并更新同时返回SELECT结果

实现方案

以下为PostgreSQL环境下的可运行SQL(你原查询用到的NULLS FIRST、RETURNING均为PostgreSQL原生支持语法):

UPDATE my_table
SET last_read = NOW()
WHERE ctid IN (
    SELECT ctid
    FROM my_table
    ORDER BY last_read ASC NULLS FIRST, created ASC
    LIMIT 3
)
RETURNING data;

说明

  • 如果你使用的表有自定义主键字段(例如id),将上述SQL中的ctid(PostgreSQL内置的行唯一标识)替换为主键字段,执行效率会更高
  • 该写法为原子操作,一次请求即可完成筛选、更新、返回结果三个动作,避免了分两次执行SELECT、UPDATE可能出现的并发数据竞争问题
  • 如果你的运行环境是MySQL,不支持NULLS FIRST语法,可以将排序逻辑改写为ORDER BY ISNULL(last_read) DESC, last_read ASC, created ASC即可实现相同排序效果

内容的提问来源于stack exchange,提问作者Rob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:15:04