mySQL: exakt gleiche Einträge importieren

B

ByeBye 272920

Heyho an die SQL Kenner!
Ich muss für ein Projekt ca. 600.000 sql Einträge importieren und habe nun das Problem, dass einige Einträge exakt gleich vorhanden sind, und der import immer abbricht!
Beispiel:
INSERT INTO db VALUES(5,'hallo');
INSERT INTO db VALUES(5,'hallo');

Gibt es eine Möglichkeit die direkt beim Import raus zu schmeißen, oder aber den Import irgendwie zu ermöglichen und sie später mit DISTINCT zu entfernen?

Würde mich sehr über eine Hilfe freuen!

Beste grüße,
Robert
 
Ich wette in der Tabelle db wurde die erste Spalte (wahrscheinlich id) als Primärschlüssel definiert oder aber es gibt einen Unique Index auf der Tabelle. Dann ist es ja auch logisch, dass du dann nicht zweimal eine Id=5 haben kannst.

Mein Tipp: erstelle eine neue Tabelle mit den genau gleichen Feldern, aber ohne PK/Index. Dann inserts in diese Tabelle und am ende:
insert into db (name_des_ersten_feldes, name_des_zweiten_feldes) select distinct * from deine_neue_tabelle;
danach kannst du die hilfstabelle wieder löschen.

oder aber du kannst natürlich auch die doppelten Einträge bereits zuvor rausschmeissen in deinem Texteditor, bevor du's überhaupt ausführst...
 
Hi!
Die erste Annahme ist semi-korrekt. Ich habe leider keine Tabellen (aka CREATE TABLE) übermittelt bekommen, sondern nur Datensätze, also die INSERT(s). Bei "5,'hallo'" handelt es sich auch, wie gesagt, um ein Beispiel: die Einträge haben ungefähr 20 Felder jeweils, aber sind teilweise halt 100% identisch.

Der Tipp ist eine sehr gute Idee, vielen Dank dafür!

Die Alternativmethode ist wohl mehr ein zynischer Tipp ;) :p, immerhin ist (siehe Anfangspost) die Rede von ca. 600.000 Einträgen.
 
Hi,

das kann MySQL doch selber machen. Das Stichwort dazu ist IGNORE.

Du musst in deinem Query nur das INSERT durch INSERT IGNORE ersetzen

Code:
INSERT INTO db VALUES(5,'hallo');
INSERT INTO db VALUES(5,'hallo');
wird also zu

Code:
INSERT IGNORE INTO db VALUES(5,'hallo');
INSERT IGNORE INTO db VALUES(5,'hallo');

Das Ersetzen machst du entweder mit einem Texteditor mit GUI (Notepad++) sollte das schaffen oder wenn du ein Linux hast mit sed aud der CommandLine

Was benutzt du denn für ein DBMS um die Datensätze zu importieren? Die meisten bieten eine Funktion an, um bei Fehlern einfach weiter zu machen. Da du einzelne Statements hast, könntest du die Fehler einfach Ignorieren lassen. Das wäre noch einfacher, als die Strings in der Textdatei zu ersetzen.
 
Abend!
Vielen Dank für die Antwort!
Ich benutze xampp/phpmyadmin und habe da erwähnte Funktion bisher nicht gefunden.

IGNORE klingt erstmal gut, allerdings kann ich ja nicht ausschließen, das weitere (andere) Fehler vorhanden sind. Und wenn ich über die nicht informiert werde, wäre das schlecht.

Aber danke für den Vorschlag!
 
Hi!
Die erste Annahme ist semi-korrekt. Ich habe leider keine Tabellen (aka CREATE TABLE) übermittelt bekommen, sondern nur Datensätze, also die INSERT(s). Bei "5,'hallo'" handelt es sich auch, wie gesagt, um ein Beispiel: die Einträge haben ungefähr 20 Felder jeweils, aber sind teilweise halt 100% identisch.

Der Tipp ist eine sehr gute Idee, vielen Dank dafür!

Die Alternativmethode ist wohl mehr ein zynischer Tipp ;) :p, immerhin ist (siehe Anfangspost) die Rede von ca. 600.000 Einträgen.

Aber du hast ja die Tabelle. Also lerne doch ersteinmal deine Tabellen kennen bevor du irgendwas darin insertest
SQL:
SHOW CREATE TABLE mytable;
SHOW INDEX FROM mytable;

Was ist denn eigentlich die Fehlermeldung die du erhälst? Error on Duplicate Key? Das kannst du mit INSERT IGNORE lösen. Das Achtet auf PKs und Unique Indexes:
https://dev.mysql.com/doc/refman/5.5/en/insert.html

Und nein, das war gar nicht zynisch. Ich würde mal deine Quelle der 600k inserts in frage stellen. Ich würde der nicht wirklich trauen. Dazu gibt es auch Online tools. Versuch mal:
http://textmechanic.com/Remove-Duplicate-Lines.html
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück