有人可以告诉我为什么这不起作用吗?
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 ...
答案 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 *