首页 > 解决方案 > 如何使用 RETURNING 子句插入两个表?

问题描述

我不明白如何使用RETURNING,例如如何获得“在我手中”的实际价值以进行下一步。假设,我有两张桌子:

create table "actors" (
  id_act serial not null primary key,
  first_name text not null,
  last_name text not null
);
create table movies (
  id_mov serial not null primary key,
  act_id integer not null
);

现在我添加一个演员:

INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks');

紧接着,我想用那个新演员的 ID 插入一部电影:

INSERT INTO movies(###);

我如何RETURNING使用它来代替我的占位符###?

标签: sqlpostgresqlsql-returning

解决方案


您不需要使用 PL/pgSQL RETURNING,这也可以在普通 SQL 中使用。

但是对于您遇到的问题,您都不需要,因为您可以使用currval()from the sequence backingactors.id来获取最后生成的id

INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks');
INSERT INTO movies(act_id) values 
(currval(pg_get_serial_sequence('actors', 'act_id')));

如果你真的想使用 RETURNING,你可以使用数据修改 CTE

with new_actor as (
  INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks')
  returning id_act
)
insert into movies (act_id)
select id_Act
from new_actor;

在线示例


推荐阅读