Heim >Datenbank >MySQL-Tutorial >Wie kann ich Zeilen von einer Tabelle in eine andere kopieren und gleichzeitig Duplikate verhindern?

Wie kann ich Zeilen von einer Tabelle in eine andere kopieren und gleichzeitig Duplikate verhindern?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-28 03:06:09430Durchsuche

How Can I Copy Rows from One Table to Another While Preventing Duplicates?

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!

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