Как добавить сразу две связанные по ключу записи в базу при помощи SQL

Если перед вами стоит задача добавить некое словарное значение в одну таблицу, при этом, значение первичного ключа может вычисляться автоматически (из sequence, например) и тут же создать еще одну запись в другую таблицу, так, чтобы эта вторая запись ссылалась на первую (например, имела ID новой записи из первой таблицы в одном из своих столбцов), возникает вопрос, где взять значение первичного ключа вновь добавленной записи.

Допустим, у нас есть таблица-справочник dictionary с полями id , title. Поле id привязано к автоматически инкрементируемой последовательности. Другая таблица some_table содержит столбцы id, some_value, dictionary_id. Здесь dictionary_id — ссылка на id в таблице dictionary, а id и some_value имеют какие-то значения по умолчанию.

Чтобы добавить новую запись в dictionary, большого труда не требуется. Но дальше как создать новую запись в some_table так, чтобы поле dictionary_id имело бы значение из только что добавленной в dictionary строки?

Вот готовое решение:

with inserted_id as (
     INSERT INTO dictionary (title)
         VALUES ('Title') RETURNING id
 ) INSERT
 INTO some_table (dictionary_id)
 SELECT id
 FROM inserted_id; 
Поделиться: Share on LinkedIn
Linkedin
Share on VK
VK
Share on Facebook
Facebook
0Tweet about this on Twitter
Twitter

Оставить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Яндекс.Метрика