Как вставить две связанные записи в две разные таблицы одним запросом в PostgreSQL? - PullRequest
0 голосов
/ 07 августа 2020

У меня есть две таблицы с отношением id. И я хочу вставить две связанные записи. Проблема в том, что id неизвестно, пока я не сделаю первую вставку. Есть ли способ написать своего рода встроенный запрос, который правильно выполняет обе вставки? Хотелось бы иметь один точный запрос и избегать переменных, если это возможно. Я пробовал:

insert into "b" ("value", "b_id")
  select 'val2', (select insert into "a" ("value") values ('val1') returning id);

Я получаю сообщение об ошибке:

ERROR: syntax error at or near "("

1 Ответ

2 голосов
/ 07 августа 2020

Для этого вам нужно использовать CTE , операторы INSERT не могут быть произвольно вложены (в отличие от SELECT):

WITH a_results AS (
  INSERT INTO a (value)
  VALUES ('val1')
  RETURNING id
)
INSERT INTO b (value, b_id)
SELECT 'val2', id
FROM a_results;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...