Możliwe jest również użycie LEFT OUTER JOIN
za to. Pozwoli to uniknąć narzutu na podzapytanie (kiedy system może wykonać podzapytanie raz dla każdego rekord zapytania zewnętrznego) jak w odpowiedzi Johna Woo i uniknie niepotrzebnej pracy nad nadpisywaniem już istniejących 800 rekordów, jak w przypadku użytkownika 2340435:
INSERT INTO b
SELECT a.* FROM a
LEFT OUTER JOIN b ON b.id = a.id
WHERE b.id IS NULL;
To najpierw wybierze wszystkie wiersze z A
i B
tabele zawierające wszystkie kolumny z obu tabel, ale dla wierszy, które istnieją w A
i nie istnieją w B
wszystkie kolumny dla B
tabela będzie NULL
.Następnie filtruje tylko te ostatnie wiersze (WHERE b.id IS NULL
), a na końcu wstawia wszystkie te wiersze do B
tabela.