У меня есть 2 внешних таблицы, давайте назовем их A и B. У меня также есть внутренняя таблица C. A и B имеют несколько перекрывающихся значений. Я хочу написать процедуру, которая записывает все значения от A до C, а затем все значения от B, которые я не делаю (от A) до C. Поэтому сначала запишите A в C, затем запишите все оставшиеся данные, которые еще не были записаны, из B в C. В основном это:
Write A -> C
Write B where not already written by A -> C
Моя первая попытка выглядела следующим образом
insert into C (select * from A);
insert into C (select * from B where b.id not in (select a.id from a));
Мои таблицы довольно большие, и линии передачи данных работают медленно, поэтому это не сработает, потому что это занимает много времени. Я предполагаю, что проблема в том, что он должен делать (select a.id from a)
для каждой записи B. Поэтому я подумал, что использование CTE наверняка поможет:
insert into C (select * from A);
insert into C
with A_values as (select a.id from a)
select * from b where b.id not in a.values;
Однако, это все равно не прекратится (слишком долго ). Есть идеи, как я могу это исправить?