2013-08-09 3 views
1

Есть ли более быстрый способ получить идентификаторы, которые существуют в table1, но не существуют в table2 и вставить их в table2?Быстрый способ вставки несоответствующих идентификаторов в столбец

insert into table2 (id) 
select id 
from table1 
where table1.id not in (select id from table2) 
+0

Проверьте план выполнения. Возможно, вы захотите попробовать 'не существует' с связанным с ним подзапросом –

+0

@a_horse_with_no_name, в чем разница между' not exist' и 'not in'? –

+0

попробуйте оба, просмотрите план выполнения обоих, и вы начнете понимать некоторые отличия (если в СУБД вы используете) – xQbert

ответ

0

В дополнение к решению с помощью оператора in попробуйте exists один

select id 
from table1 t1 
where not exists (
    select 1 
    from table2 
    where id = t1.id 
) 

Если подзапрос возвращает пустой набор not exists оценивает в true

outer join

select id 
from 
    table1 t1 
    left join 
    table2 t2 on t1.id = t2.id 
where t2.id is null 

Использовать explain analyze для сравнения

Смежные вопросы