Heim >Datenbank >MySQL-Tutorial >Wie kopiere ich Zeilen zwischen Tabellen, ohne Duplikate zu erstellen?
Zeilen zwischen Tabellen kopieren, ohne Daten zu duplizieren
Beim Übertragen von Daten von einer Tabelle in eine andere ist es wichtig, das Einfügen doppelter Zeilen zu verhindern. Um dies zu erreichen, benötigen wir eine Methode, die vorhandene Datensätze herausfiltert.
In Ihrem ersten Ansatz haben Sie versucht, eine WHERE-Klausel mit einer Unterabfrage zu verwenden, um eindeutige Zeilen zu identifizieren. Der Unterabfrage fehlten jedoch Kriterien zur Ermittlung von Duplikaten.
Lösung: Unterabfrage mit WHERE-Filterung verwenden
Um Duplikate effektiv herauszufiltern, können Sie Ihre Unterabfrage wie folgt ändern:
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 aktualisierte Unterabfrage fügt eine Bedingung hinzu, die bestimmte Felder zwischen der Quell- und der Zieltabelle vergleicht, um festzustellen, ob es sich um ein Duplikat handelt existiert.
Lösung mit Outer Join
Alternativ können Sie einen Outer Join verwenden, um das gleiche Ergebnis zu erzielen. Ein äußerer Join ruft alle Zeilen aus einer Tabelle und übereinstimmende Zeilen aus einer anderen Tabelle ab und belässt nicht übereinstimmende Zeilen als NULL.
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
In diesem Fall gleicht der äußere Join Zeilen basierend auf ihren Schlüsselfeldern ab (Schlüssel1, Schlüssel2, usw.). Zeilen in der Quelltabelle, die mit keiner Zeile in der Zieltabelle übereinstimmen, haben NULL-Werte für die Schlüsselfelder und diese Zeilen werden in die Zieltabelle eingefügt.
Zusätzliche Überlegungen
Wenn es Ihnen ausschließlich darum geht, Duplikate aus der Quelltabelle zu verhindern, können Sie in Ihrem SELECT ein eindeutiges Schlüsselwort verwenden Anweisung:
INSERT INTO destTable SELECT Distinct field1,field2,field3,... FROM srcTable
Schließlich wird aus Leistungsgründen empfohlen, die spezifischen Felder in Ihrer INSERT-Anweisung anzugeben, anstatt SELECT * zu verwenden.
Das obige ist der detaillierte Inhalt vonWie kopiere ich Zeilen zwischen Tabellen, ohne Duplikate zu erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!