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

使用ON CONFLICT DO NOTHING时如何返回成功插入的非重复行?

如何返回INSERT...ON CONFLICT DO NOTHING中成功插入的非重复行

直接在INSERT语句末尾加上RETURNING子句(指定需要返回的列或用*返回全部列),就能快速获取实际成功插入的非重复行,这是最直接高效的方式。

示例代码:

INSERT INTO mytable (id, col1, col2)
VALUES 
  (123, 'some_value', 'some_other_value'),
  (456, 'new_val', 'another_new_val'),
  (123, 'some_value', 'some_other_value') -- 该行因冲突被跳过,不会插入
ON CONFLICT (id, col1, col2) DO NOTHING
RETURNING id, col1, col2; -- 仅返回第二条成功插入的行

原理很明确:RETURNING会捕获INSERT操作中实际写入表的行数据,那些触发冲突被DO NOTHING忽略的行不会出现在返回结果里。

如果需要统计成功插入的行数,还可以结合CTE来实现:

WITH inserted_rows AS (
  INSERT INTO mytable (id, col1, col2)
  VALUES (...)
  ON CONFLICT (id, col1, col2) DO NOTHING
  RETURNING *
)
SELECT COUNT(*) AS inserted_count FROM inserted_rows;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:42:37