Вставить значение из таблицы в другую таблицу в качестве внешнего ключа - PullRequest
0 голосов
/ 07 марта 2019

У меня есть две таблицы, cinema и theater.

Стол Cinema

Столбцы: id, name, is_active

Table Theater

Столбцы: id, cinema_id

Я делаю вставку в БД, по порядку.Сначала я вставлю в cinema, а затем в theater.cinema_id.theater - это внешний ключ, который ссылается на cinema.id.После вставки в cinema я вставлю данные в theater, но мне нужно значение из id в кинотеатре, прежде чем вставлять данные в cinema_id.

Я думал о RETURNING id INTO cinema_id и затем сохраните в theater.Но я действительно не знаю, как я могу сделать что-то подобное.

Есть мысли?Есть ли лучший способ сделать что-то подобное?

Ответы [ 3 ]

1 голос
/ 07 марта 2019

У вас есть два варианта.

Первый использует функцию 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 и возвращающее предложение:

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 также является сгенерированным значением.

0 голосов
/ 08 марта 2019

этот способ работает.

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;
0 голосов
/ 07 марта 2019
INSERT INTO tableB
(
    columnA
)
SELECT
    columnA
FROM
    tableA
ORDER BY columnA desc
LIMIT 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...