Вы можете сделать это с помощью not exists
:
select t1.id, t1.animal
from table1 t1
union all
select t2.id, t2.animal
from table2 t2
where not exists (select 1 from table1 t1 where t1.id = t2.id);
Было бы интересно сравнить производительность этой версии с производительностью версии full join
. планы объяснения двух методов удивительно интересны.
Без каких-либо первичных ключей в таблицах эта версия намного, намного быстрее, чем версия full join
. С первичными ключами full join
работает немного быстрее. В обоих случаях union all
должен быстрее возвращать первую строку.
Я не понимаю, что план для not exists
версии без первичных ключей: быстрее чем версия с первичными ключами. Тайны оптимизаторов баз данных.