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

时间:2019-03-07 19:32:19

标签: postgresql foreign-keys sql-insert auto-increment

我有两个表cinematheater

Table Cinema

列: id, name, is_active

桌剧院

列: id, cinema_id

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

我正在考虑RETURNING id INTO cinema_id,然后保存到theater。但是我真的不知道该怎么做。

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

3 个答案:

答案 0 :(得分:1)

您有两个选择。

第一个正在使用lastval()函数,该函数返回最后生成的序列值的值:

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和returning子句链接这两个语句:

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也是一个生成的值。

答案 1 :(得分:0)

这种方式有效。

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;

答案 2 :(得分:-1)

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