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

PostgreSQL:实现插入或更新记录并始终返回主键的方法

解决方案

可以通过合并更新与插入操作返回的结果集,实现始终返回主键的需求,重写后的查询如下:

WITH _a AS (
  UPDATE mytable1 
  SET name = expr1, last_name = expr2
  WHERE empId = expr3
  RETURNING empId 
), _b AS (
  INSERT INTO mytable1 (empId, name, last_name)
  SELECT expr3, expr1, expr2
  WHERE NOT EXISTS (SELECT 1 FROM _a)
  RETURNING empId 
)
SELECT empId FROM _a
UNION ALL
SELECT empId FROM _b;

关键修改说明:

  • 修正了INSERT语句的SELECT写法:原语句的SELECT(expr3, expr1, expr2)会生成单行复合值,易导致列数不匹配,改为SELECT expr3, expr1, expr2直接提供对应列的取值。
  • 新增UNION ALL合并结果集:更新操作时_a会返回主键,插入操作时_b会返回主键,合并两个结果集后,无论哪种操作都会输出对应的主键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 11:33:10