在PostgreSQL中的SELECT SQL语句中插入INSERT SQL语句

时间:2018-09-07 18:13:21

标签: sql postgresql

有人可以告诉我为什么这不起作用吗?

select * 
from keyword_groups_list 
where group_id = (insert into keyword_groups_list(group_name, keyword_tool_id) 
                  values('title', 86574551) returning group_id);

我在PostgreSQL中收到错误:

  

错误:“进入”或附近的语法错误
  第1行:...来自keyword_groups_list,其中group_id =(插入keywo ...

2 个答案:

答案 0 :(得分:5)

我完全不知道为什么您需要选择。只需使用returning *即可获取新插入的行的所有列:

insert into keyword_groups_list(group_name, keyword_tool_id) 
values ('title', 86574551) 
returning *;

话虽如此,但是如果您确实需要选择,则可以通过CTE进行:

with new_groups as (
    insert into keyword_groups_list(group_name, keyword_tool_id) 
    values ('title', 86574551) 
    returning group_id
)
select * 
from keyword_groups_list 
where group_id in (select group_id from new_groups);

但是我想不出有什么理由比简单的returning *更喜欢它;

答案 1 :(得分:0)

如果将该值放入CTE,则可以访问该值

查看此SQL fiddle

with t as (
    insert into mytable (id, val) values(1,'abc') returning id
)
select * from anotherTable where id in (select id from t)

Postgres INSERT documentation还有另一个类似的CTE示例。搜索“返回”

或者只是简化为

insert into mytable (id, val) values(1,'abc') returning *