我有两个表cinema
和theater
。
Table Cinema
列:
id, name, is_active
桌剧院
列:
id, cinema_id
我正在按顺序插入数据库。首先,我将插入cinema
,然后插入theater
。 cinema_id.theater
是引用cinema.id
的外键。在插入cinema
之后,我将数据插入theater
,但是在将数据插入id
之前,我需要电影院cinema_id
的值。
我正在考虑RETURNING id INTO cinema_id
,然后保存到theater
。但是我真的不知道该怎么做。
有什么想法吗?有没有更好的方法来做这样的事情?
答案 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