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

PostgreSQL使用WITH子句多表INSERT后如何返回adapter的name值

解决方法

你可以把第二次插入user_adapter的操作也封装为WITH子句中的一个CTE,最后直接从已返回name字段的AdapterIns中查询结果即可,调整后的可运行SQL如下:

WITH 
AdapterName AS (
    SELECT CONCAT('s', LTRIM(name, 's')::INTEGER + 1) AS new_name
    FROM adapter
    WHERE adapter.name LIKE 's%'
    ORDER BY id DESC
    LIMIT 1
),
AdapterIns AS (
    INSERT INTO adapter (create_date, name, tag) 
    SELECT now(), new_name, new_name 
    FROM AdapterName 
    RETURNING id, name
),
UserAdapterIns AS (
    INSERT INTO user_adapter (create_date, user_id, adapter_id)
    SELECT now(), 1, AdapterIns.id
    FROM AdapterIns
    RETURNING adapter_id
)
SELECT name FROM AdapterIns;

说明

  • 你之前的语法报错是因为PostgreSQL不允许将包含INSERT/UPDATE/DELETE等数据修改操作的CTE嵌套在子查询内,所有修改类CTE必须放在最外层的WITH块中。
  • 你已经在AdapterIns CTE中通过RETURNING id,name拿到了刚插入的adapter的name值,不需要再额外关联原adapter表做二次查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 14:06:02