如何在 postgres 的单个命令中插入然后更新从插入查询返回的 Id 作为返回 id?
How to insert and then update returned Id from insert query as returning id in a single command in postgres?
我有一个演示 table
CREATE TABLE items (
id SERIAL primary key,
user_id integer,
name character varying,
created timestamp with time zone default now()
);
我想要一个查询 运行 并首先插入数据,然后使用 returning id return 主键,然后使用 table 更新相同的 table return编辑编号。
INSERT INTO items (name) values ('pen') RETURNING id as idd
update items set user_id=(select idd) where id=(select idd)
但上面的命令不起作用并抛出语法错误。
我们将不胜感激。
您可以直接在 INSERT 语句中执行此操作:
INSERT INTO items
(name, user_id)
values
('pen', currval(pg_get_serial_sequence('items','id')));
你也可以试试这个方法:
create temp table insert_item as
with insert_item_cte as (
INSERT INTO items (name)
values ('pen') returning id
)
select id from insert_item_cte;
update items set user_id = items.id
from insert_item ii
where ii.id = items.id;
我有一个演示 table
CREATE TABLE items (
id SERIAL primary key,
user_id integer,
name character varying,
created timestamp with time zone default now()
);
我想要一个查询 运行 并首先插入数据,然后使用 returning id return 主键,然后使用 table 更新相同的 table return编辑编号。
INSERT INTO items (name) values ('pen') RETURNING id as idd
update items set user_id=(select idd) where id=(select idd)
但上面的命令不起作用并抛出语法错误。 我们将不胜感激。
您可以直接在 INSERT 语句中执行此操作:
INSERT INTO items
(name, user_id)
values
('pen', currval(pg_get_serial_sequence('items','id')));
你也可以试试这个方法:
create temp table insert_item as
with insert_item_cte as (
INSERT INTO items (name)
values ('pen') returning id
)
select id from insert_item_cte;
update items set user_id = items.id
from insert_item ii
where ii.id = items.id;