Как добавить сразу две связанные по ключу записи в базу при помощи 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; 

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

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