将 table 中的值作为外键插入另一个 table

Insert a value from a table in another table as foreign key

我有两个表,cinematheater

Table 影院

列: id, name, is_active

Table 剧院

列: id, cinema_id

我正在按顺序插入数据库。首先,我将插入 cinema,然后插入 theatercinema_id.theater 是引用 cinema.id 的外键。插入 cinema 后,我会将数据插入 theater,但在将数据插入 cinema_id.[=26= 之前,我需要电影 id 的值]

我在考虑RETURNING id INTO cinema_id,然后保存到theater。但是我真的不知道我怎么可能做这样的事情。

有什么想法吗?有没有更好的方法来做这样的事情?

INSERT INTO tableB
(
    columnA
)
SELECT
    columnA
FROM
    tableA
ORDER BY columnA desc
LIMIT 1

你有两个选择。

第一个是使用 lastval() 函数,returns 最后生成的序列值的值:

insert into cinema(name, is_active) values ('Cinema One', true); 
insert into theater(cinema_id) values (lastval());

或者您可以将序列名称传递给 currval() 函数:

insert into theater(cinema_id) 
values (currval(pg_get_serial_sequence('cinema', 'id')));

或者,您可以使用 CTE 和返回子句链接这两个语句:

with new_cinema as (
   insert into cinema (name, is_active)   
   values ('Cinema One', true)
   returning id
)
insert into theater (cinema_id)
select id
from new_cinema;

在这两个语句中,我假设 theater.id 也是生成的值。

这种方式可行。

with new_cinema as (
   insert into cinema (name, is_active)   
   values ('Cinema One', true)
   returning id
)
insert into theater (cinema_id)
select id
from new_cinema;