Überprüfen Sie mehrere doppelte Datensätze
-
22-10-2019 - |
Frage
Ich habe Daten, die ich in die Tabelle einfügen sollte. Vor dem Einfügen muss ich jedoch gegen doppelte Datensätze und Berichtsliste dieser Aufzeichnungen überprüfen.
Tisch:
CREATE TABLE `test` (
`A` varchar(19) NOT NULL,
`B` varchar(9) NOT NULL,
KEY `A` (`A`),
KEY `B` (`B`)
) ENGINE=InnoDB;
Ich muss nach beiden Spalten überprüfen:
Anzahl der Datensätze zum Einfügen: ~ 1000
Zeilen in der Tabelle: ~ 1.000.000
Was ist die effiziente Art, dies zu tun?
Danke im Voraus.
Lösung
Dies würde vom Layout der Tabelle abhängen.
Angenommen, Sie haben die folgende Tabelle
CREATE TABLE `mydata` (
`A` varchar(19) NOT NULL,
`B` varchar(9) NOT NULL,
KEY `A` (`A`),
KEY `B` (`B`)
) ENGINE=InnoDB;
Bevor Sie 1000 Zeilen in mydata einfügen, können Sie sie in einen anderen Tisch namens MyNewdata wie folgt einladen:
CREATE TABLE mynewdata LIKE mydata;
CREATE TABLE mynewdups LIKE mydata;
INSERT INTO mynewdata ... ;
INSERT INTO mynewdups SELECT * FROM mynewdata;
Als nächstes löschen
DELETE T1.* FROM mynewdata T1 INNER JOIN mydata T2 ON T1.A=T2.A OR T1.B=T2.B;
Was in Mydata übrig bleibt, sind Zeilen, die keine A- oder B -Übereinstimmung haben
Was ist mit den übereinstimmenden Zeilen? Führen Sie das aus
DELETE T1.* FROM mynewdups T1 LEFT JOIN mydata T2
ON T1.A=T2.A OR T1.B=T2.B
WHERE T2.A IS NOT NULL;
Was in mynewdata übrig bleibt, sind Daten zum Importieren
Was in MyNewdups übrig bleibt, sind Daten mit einem DUP -Schlüssel in Mydata
Versuche es !!!