Postgresql Несколько вставок в любые таблицы в зависимости от результата одного выбора - PullRequest
0 голосов
/ 17 декабря 2018

Используя Postgresql (9.6), мне нужно выполнить несколько запросов вставки в любые таблицы ( table1, table2, table3, ... ) в зависимости от результата одного запроса на выборку из другого tableMain если результат содержит одну или несколько записей, например:

{
 insert into table1 (id, name) values(1, 'name');
 insert into table2 (id, name) values(1, 'name');
 insert into table3 (id, name) values(1, 'name');
} if exists (select id from tableMain where id = 1)

1 Ответ

0 голосов
/ 17 декабря 2018

Вы можете использовать данные, модифицирующие CTE , который сначала проверяет, существует ли строка в tablemain, а затем повторно использует этот результат в последующих операторах INSERT.

with idcheck (main_exist) as (
  select exists (select * from tablemain where id = 1 limit 1)
), t1 as (
  insert into table1 (id, name)
  select 1, 'name'
  from idcheck 
  where main_exists
), t2 as (
  insert into table2 (id, name)
  select 1, 'name'
  from idcheck 
  where main_exists
)
insert into table3 (id, name)
select 1, 'name'
from idcheck 
where main_exists;

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

with idcheck (id, name, main_exist) as (
  select 1, 
         'name',
         exists (select * from tablemain where id = 1 limit 1)
), t1 as (
  insert into table1 (id, name)
  select id, name
  from idcheck 
  where main_exists
), t2 as (
  insert into table2 (id, name)
  select id, name
  from idcheck 
  where main_exists
)
insert into table3 (id, name)
select id, name
from idcheck 
where main_exists;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...