微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

插入后如何从WITH子句返回另一个值

如何解决插入后如何从WITH子句返回另一个值

我尝试使用 With 子句插入另一个表。我可以从最终查询中返回 id,但主要目标是获取适配器的名称

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)
INSERT INTO user_adapter (create_date,user_id,adapter_id)
Select Now(),1,AdapterIns.id
From AdapterIns
RETURNING adapter_id;

如何返回 AdapterIns.name 作为最终结果?

谢谢,

更新:我也尝试将adapter_id与原始表连接,但在最新的INSERT中出现以下错误

[42601] 错误:“INSERT”处或附近的语法错误

Select adapter.name
From adapter
        Join (With AdapterName as (Select CONCAT('s','s')::integer+1) as new_name
                                          From adapter
                                          Where adapter.name LIKE 's%'
                                          Order by id desc
                                          Limit 1),new_name From AdapterName RETURNING id)
                     INSERT INTO user_adapter (create_date,adapter_id)
                     Select Now(),AdapterIns.id
                     From AdapterIns
                         RETURNING adapter_id) temp on adapter.id = temp.adapter_id;

解决方法

你不能。 Postgres 只允许你返回被插入的列。

您可以使用 returning * 然后连接回原始表以获取名称。

,

将第二个插入语句也塑造成 CTE(下面我称之为 original_insert)然后选择会有所帮助。

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),original_insert as (
                     INSERT INTO user_adapter (create_date,user_id,adapter_id)
                     Select now(),1,AdapterIns.id
                     From AdapterIns
                     RETURNING adapter_id
                    )
SELECT oi.adapter_id,ai.name 
FROM original_insert oi JOIN AdapterIns ai ON oi.adapter_id = ai.id;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。