插入并返回子查询

Insert with returning a subquery

我正在尝试在 m:n table(用户组关系)和 return 用户成功加入组时插入一条记录。

但是插入后我无法return整个组。

with "group" as (
    SELECT * from "group" where code = 'tohubo' LIMIT 1
)
insert into group_users__user_groups ("group_users", "user_groups")
    select id from "group", 1 
returning (SELECT * from "group")

通过该查询,我目前收到错误消息

subquery must return only one column

我也试过只return*,结果只得到group_users__user_groups.

的内容

我也试过在最后加一个Select:

with "found_group" as (
    SELECT * from "group" where code = 'tohubo' LIMIT 1
)
insert into group_users__user_groups ("group_users", "user_groups")
    select 1, id from "found_group";
Select * from "found_group";

但是在第二个查询中没有定义 WITH 部分:

Kernel error: ERROR: relation "found_group" does not exist

returning 子句只能 return 受插入影响的数据。

并且在一个 CTE 中你只能有一个 "final" 语句,而不是插入 一个 select。

但是您可以简单地将插入移动到第二个 cte 中,然后在末尾有一个 SELECT,return 是找到的数据

with found_group as (
    SELECT * 
    from "group" 
    where code = 'tohubo' 
    LIMIT 1
), inserted as (
   insert into group_users__user_groups (group_users, user_groups)
   select 1, id 
   from found_group
)
Select * 
from found_group;