MySQL doppelte Einträge loswerden
jb 16.03.2016 - 08:58 1979 3
jb
Here to stay
|
Hallo! Hab eine Tabelle, die aus einer importierten Textdatei ohne Indizes importiert wird. Leider gibt es da doppelte Einträge die ich jetzt loswerden möchte. Diverse Suchen haben mich schon einen kleinen Schritt näher ans Ziel gebracht, ich hab jetzt eine Abfrage, die mir zumindest mal anzeigt, wie oft ein Eintrag vorhanden ist. Dieses Abfrage-Ergebnis bräuchte ich jetzt in eine Tabelle geschrieben, dann nur noch die Spalte Anzahl löschen, Tabelle umbenennen, fertig. Meine bestehende Abfrage ist: SELECT COUNT( * ) AS anzahl, datum, name_id, art_id, abwesend_id
FROM `schicht_plan`
GROUP BY datum, name_id, art_id, abwesend_id;
Habs aber nicht geschafft, die korrekte Syntax zum Import in eine andere (temporäre) Tabelle zu finden. Die andere Tabelle hat als erstes Feld noch die Anzahl drinnen.
Bearbeitet von JC am 16.03.2016, 09:36 (code=sql)
|
Crash Override
BOfH
|
INSERT INTO neueTabelle ( anzahl, datum, name_id, art_id, abwesend_id )
SELECT COUNT( * ) AS anzahl, datum, name_id, art_id, abwesend_id
FROM `schicht_plan`
GROUP BY datum, name_id, art_id, abwesend_id;
Bearbeitet von JC am 16.03.2016, 09:36 (code=sql)
|
jb
Here to stay
|
Vielen Dank, viel einfacher als ich dachte. INSERT INTO neueTabelle hatte ich schon, nur dann hab ich ne Klammer gesetzt und das SELECT Statement reingeschrieben. Mein weiterer Weg: DROP TABLE schicht_plan;
ALTER TABLE `schicht_plan_temp` DROP `anzahl` ;
RENAME TABLE schicht_plan_temp TO schicht_plan;
Das kommt jetzt in ein kleines Shellscript, damits gleich automatisch nach dem Import aufräumt.
|
Crash Override
BOfH
|
Wenn du alle Felder zusammen als Primary Key (oder alternativ als Unique Key) definierst, wird dir der Import keine doppelten werte anlegen können. Ist im Endeffekt die sauberere Methode da das Schema nicht über eine Applikation geänderrt werden sollte. Allerdings müsste der Import Fehler übergehen können. Normalerweise gibt man dem Applikationsbenutzer nur rechte für INSERT, UPDATE, SELECT und DELETE.
|