Heim >Datenbank >MySQL-Tutorial >Wie kann ich Zeilen zwischen Tabellen kopieren und gleichzeitig doppelte Einträge verhindern?
Zeilen zwischen Tabellen kopieren und dabei Duplikate ignorieren
Bei der Arbeit mit mehreren Tabellen ist es oft notwendig, Zeilen zwischen ihnen zu kopieren. Es ist jedoch wichtig, das Einfügen doppelter Zeilen zu verhindern. Die folgende Diskussion befasst sich mit dem Problem eines Benutzers bei der Implementierung dieser Aufgabe.
Zunächst versuchte der Benutzer, eine WHERE-Klausel mit einer Unterabfrage zu verwenden, um nicht doppelte Zeilen zu identifizieren. Dieser Ansatz brachte jedoch keine Ergebnisse. Es wurde auch darüber nachgedacht, die WHERE-Klausel durch eine sekundäre Schlüsselfilterung zu ersetzen, aber dies erwies sich aufgrund des Vorhandenseins mehrerer Schlüssel als undurchführbar.
Eine praktikable Lösung besteht darin, die Unterabfrage so zu ändern, dass sie ein Prädikat enthält, das doppelte Zeilen anhand bestimmter Kriterien identifiziert. Dadurch wird sichergestellt, dass nur eindeutige Zeilen eingefügt werden.
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.) )
Alternativ kann für eine größere Übersichtlichkeit ein äußerer Join verwendet werden:
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 Ansätze beheben das Problem doppelter Zeilen im Ziel Tisch. Wenn jedoch Bedenken hinsichtlich doppelter Zeilen in der Quelltabelle bestehen, kann die folgende Abfrage verwendet werden:
INSERT INTO destTable SELECT Distinct field1,field2,field3,... FROM srcTable
Zuletzt wird empfohlen, die Felder explizit in der INSERT-Anweisung aufzulisten, anstatt sich auf das * zu verlassen. Platzhalter, um die Datenintegrität sicherzustellen.
Das obige ist der detaillierte Inhalt vonWie kann ich Zeilen zwischen Tabellen kopieren und gleichzeitig doppelte Einträge verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!