2016-05-11 48 views
0

我试图在m:n表(用户组关系)中插入记录,并在用户成功加入时返回组。插入并返回子查询

但我无法设法在插入后返回整个组。

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

我也试着只返回*,但后来我只得到group_users__user_groups的内容。

我也试图在最后添加一个额外的选择:

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"; 

但后来分手了未在第二个查询定义:

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

+0

我们需要写'Insert'第一则'与'然后从表格或内联表名称中选择'。检查一次,是否还需要进行类似的更改。 –

+0

'select id from“group”,1'这个部分不清楚 - 你是否试图用1加入“group”?如果你想插入两个值,它应该是'select id,1 from“group” ' –

+0

btw http://www.postgresql.org/docs/9.5/static/sql-insert.html所以并不意味着要返回这两列返回*?.. –

回答

1

returning子句只能返回数据这受插件影响。

而你只能在CTE中有一个“final”声明,而不是插入一个select。

但是你可以简单地插入移动到第二CTE,然后必须在返回所发现的数据结束的单一SELECT

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; 
在甲骨文