Heim >Datenbank >MySQL-Tutorial >Wie kopiere ich Zeilen zwischen Tabellen, ohne Duplikate zu erstellen?

Wie kopiere ich Zeilen zwischen Tabellen, ohne Duplikate zu erstellen?

DDD
DDDOriginal
2024-12-27 05:14:13594Durchsuche

How to Copy Rows Between Tables Without Creating Duplicates?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn