Heim >Datenbank >MySQL-Tutorial >Wie kann ich Zeilen von einer Tabelle in eine andere kopieren und gleichzeitig Duplikate verhindern?
Zeilen in eine Tabelle kopieren und dabei Duplikate vermeiden
Das Ziel besteht darin, alle Zeilen von einer Tabelle (srcTable) in eine andere (destTable) zu übertragen. , ausgenommen etwaige doppelte Einträge. Obwohl es einfach erscheinen mag, eine WHERE-Klausel mit einer Unterabfrage hinzuzufügen, die Duplikate herausfiltert, kann dieser Ansatz fehlschlagen.
Problem mit der Unterabfrage:
Die ursprüngliche Abfrage lautet wie folgt :
INSERT INTO destTable SELECT * FROM srcTable WHERE NOT EXISTS(SELECT * FROM destTable)
Diese Abfrage fügt jedoch keine Zeilen ein, da die Unterabfrage alle Zeilen von destTable zurückgibt, unabhängig davon, ob sie vorhanden sind Entspricht allen Zeilen in srcTable. Damit die Unterabfrage funktioniert, muss sie eine zusätzliche Bedingung enthalten, um doppelte Zeilen basierend auf relevanten Feldern zu identifizieren.
Überarbeitete Unterabfrage:
INSERT INTO destTable SELECT Field1, Field2, Field3, ... FROM srcTable WHERE NOT EXISTS(SELECT * FROM destTable WHERE (srcTable.Field1 = DestTable.Field1 AND srcTable.Field2 = DestTable.Field2 ... etc.))
Diese überarbeitete Unterabfrage vergleicht bestimmte Felder, um Duplikate zu ermitteln und diese vom Einfügen auszuschließen.
Outer Join Alternative:
Ein alternativer Ansatz ist die Verwendung eines Outer-Joins:
INSERT INTO destTable SELECT s.field1, s.field2, s.field3,... FROM srcTable s LEFT JOIN destTable d ON (d.Key1 = s.Key1 AND d.Key2 = s.Key2 AND...) WHERE d.Key1 IS NULL
Diese Outer-Join-Technik filtert Zeilen aus srcTable heraus, die übereinstimmende Schlüssel in destTable haben, und schließt Duplikate beim Einfügen aus .
Duplikate der Quelltabelle adressieren:
Wenn Die Sorge besteht darin, dass sourceTable doppelte Zeilen enthält. Die Abfrage sollte so geändert werden, dass unterschiedliche Zeilen ausgewählt werden:
INSERT INTO destTable SELECT DISTINCT Field1, Field2, Field3,... FROM srcTable
Es wird empfohlen, bestimmte Feldnamen in die INSERT-Anweisung aufzunehmen, anstatt SELECT * zu verwenden.
Das obige ist der detaillierte Inhalt vonWie kann ich Zeilen von einer Tabelle in eine andere kopieren und gleichzeitig Duplikate verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!