Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Fügen Sie mit mysql fehlende Datensätze aus einer Tabelle in eine andere ein

Es ist auch möglich, LEFT OUTER JOIN zu verwenden dafür. Dies vermeidet Unterabfrage-Overhead (wenn das System Unterabfragen einmal für jeden ausführen könnte Datensatz der äußeren Abfrage) wie in John Woos Antwort und vermeidet unnötige Arbeit, die bereits vorhandene 800 Datensätze überschreibt, wie in user2340435:

INSERT INTO b
SELECT a.* FROM a
LEFT OUTER JOIN b ON b.id = a.id
WHERE b.id IS NULL;

Dadurch werden zuerst alle Zeilen von A ausgewählt und B Tabellen mit allen Spalten aus beiden Tabellen, aber für Zeilen, die in A existieren und existieren nicht in B alle Spalten für B Tabelle wird NULL sein . Dann filtert es nur solche letzteren Zeilen (WHERE b.id IS NULL ), und schließlich fügt es all diese Zeilen in B ein Tabelle.