Je také možné použít LEFT OUTER JOIN
pro to. Vyhnete se tak režii poddotazu (když systém může provést poddotaz jednou pro každý záznam vnějšího dotazu) jako v odpovědi Johna Woo a vyhne se zbytečné práci s přepisováním již existujících 800 záznamů, jako je tomu v případě uživatele 2340435:
INSERT INTO b
SELECT a.* FROM a
LEFT OUTER JOIN b ON b.id = a.id
WHERE b.id IS NULL;
Tím se nejprve vyberou všechny řádky z A
a B
tabulky včetně všech sloupců z obou tabulek, ale pro řádky, které existují v A
a neexistují v B
všechny sloupce pro B
tabulka bude NULL
.Pak odfiltruje pouze tyto poslední řádky (WHERE b.id IS NULL
) a nakonec vloží všechny tyto řádky do B
tabulka.