"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

MySQL doppelte Einträge loswerden

jb 16.03.2016 - 08:58 1979 3
Posts

jb

Here to stay
Registered: May 2000
Location: /home/noe/
Posts: 3514
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:
Code: SQL
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
Registered: Jun 2005
Location: Germany
Posts: 2951
Code: SQL
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
Registered: May 2000
Location: /home/noe/
Posts: 3514
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. :rolleyes:

Mein weiterer Weg:
Code: SQL
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
Registered: Jun 2005
Location: Germany
Posts: 2951
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.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz