插入并返回子查询
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;
我正在尝试在 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;