将 table 中的值作为外键插入另一个 table
Insert a value from a table in another table as foreign key
我有两个表,cinema
和 theater
。
Table 影院
列:
id, name, is_active
Table 剧院
列:
id, cinema_id
我正在按顺序插入数据库。首先,我将插入 cinema
,然后插入 theater
。 cinema_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;
我有两个表,cinema
和 theater
。
Table 影院
列:
id, name, is_active
Table 剧院
列:
id, cinema_id
我正在按顺序插入数据库。首先,我将插入 cinema
,然后插入 theater
。 cinema_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;