Вы можете использовать данные, модифицирующие 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;