Heim >Datenbank >MySQL-Tutorial >Wie kann die Zeilenintegrität beim Kopieren von Daten zwischen Tabellen mit Duplikatprüfungen gewahrt werden?
Bewahrung der Zeilenintegrität: Kopieren von Daten mit Duplikatprüfungen
Wenn Sie vor der Aufgabe stehen, Daten zwischen zwei Tabellen mit identischen Schemata zu replizieren, stellen Sie die Daten sicher Integrität wird an erster Stelle. Ein häufiges Problem tritt auf, wenn versucht wird, Zeilen von einer Tabelle in eine andere zu kopieren und dabei Duplikate ignoriert werden. Schauen wir uns eine Lösung zur Bewältigung dieser Herausforderung an.
Anfänglich umfasste die vorgeschlagene Lösung die Verwendung einer WHERE-Klausel mit einer Unterabfrage, um doppelte Zeilen herauszufiltern:
INSERT INTO destTable SELECT * FROM srcTable WHERE NOT EXISTS(SELECT * FROM destTable)
Dieser Ansatz scheitert jedoch Integrieren Sie die Kriterien, die definieren, was ein Duplikat darstellt. Um dieses Problem zu beheben, ist eine zusätzliche WHERE-Klausel innerhalb der Unterabfrage erforderlich, die die Übereinstimmungskriterien angibt:
WHERE NOT EXISTS(SELECT * FROM destTable WHERE (srcTable.Field1=destTable.Field1 and SrcTable.Field2=DestTable.Field2...etc.)
Alternativ bietet ein äußerer Join eine prägnantere Lösung:
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
Dies Der Ansatz identifiziert und fügt Zeilen aus der Quelltabelle ein, die in der Zieltabelle keine übereinstimmenden Zeilen haben, basierend auf dem angegebenen Join Schlüssel.
Wenn das Problem darüber hinaus in möglichen doppelten Zeilen innerhalb der Quelltabelle selbst liegt, kann eine eindeutige Anweisung verwendet werden:
INSERT INTO destTable SELECT Distinct field1,field2,field3,... FROM srcTable
Abschließend wird empfohlen, bestimmte Feldnamen aufzulisten Fügen Sie Anweisungen ein, anstatt SELECT * zu verwenden, um sicherzustellen, dass nur die vorgesehenen Felder kopiert werden.
Das obige ist der detaillierte Inhalt vonWie kann die Zeilenintegrität beim Kopieren von Daten zwischen Tabellen mit Duplikatprüfungen gewahrt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!