| 

.NET C# Java Javascript Exception

4
Durch einen Import sind einige Datensätze doppelt. Die sind auch eindeutig zu erkennen, da sie auch in der Spalte doppelt sind, die der Primärschlüssel werden soll. Ist er natürlich noch nicht, sonst gäbe es ja per definitionem keine Doppelten.
News:
10.02.2011
Perf 81 3
6 Antworten
5
DISTINCT heißt das Zauberwort.

Du legst dir eine zweite Tabelle mit der gleich Struktur an und machst danach ein

INSERT INTO tabelle2 SELECT DISTINCT * FROM tabelle1;


PS: Der Code oben ist vom MSSQL, sollte in MySQL aber auch so oder so ähnlich laufen.
10.02.2011
Andreas Richter 774 1 1 7
Ja, klar, das ist das einfachste +1
Maria Simlinger 10.02.2011
gute Idee, +1
Floyd 10.02.2011
1
Auf Basis von Floyds Vorschlag hab ich jetzt ein bisschen rumprobiert. Mit der folgenden Abfrage kriege ich die doppelten raus:

SELECT * from Zustaende AS t1 
INNER JOIN Zustaende AS t2
ON t1.zahl<t2.zahl AND t1.id=t2.id

wobei hier zahl die eingefügte Autoincrement-Spalte und id die spätere Primary Key-Spalte ist.
Leider, leider, leider konnte ich aus dem Select nicht einfach ein Delete machen, denn der MySql-Server ist noch eine 4.0.irgendwas. Und der mochte das nicht. Also aus den WErten über Word eine Liste gemacht und dann ein

DELETE FROM Zustaende WHERE zahl IN (1222, 3434, 2321 ...)

umständlich, aber es hat funktioniert.
10.02.2011
Perf 81 3
nicht schön aber selten :D
Floyd 10.02.2011
0
DELETE FROM table1
USING table1, table1 as vtable
WHERE (NOT table1.ID=vtable.ID)
AND (table1.field_name=vtable.field_name)

1. Here you tell mysql that there is a table1.
2. Then you tell it that you will use table1 and a virtual table with the values of table1.
3. This will let mysql not compare a record with itself!
4. Here you tell it that there shouldn’t be records with the same field_name

via http://www.cyberciti.biz/faq/howto-removing-eliminating-duplicates-from-a-mysql-table/
10.02.2011
Konstantin 3,7k 7
du hast den selben denkfehler wie ich, die ID ist ebenfalls doppelt
Floyd 10.02.2011
0
Du fügst als erstes eine neue ID-Spalte an die du als autoincrement definierst (diese kannst du später wieder löschen).

Das folgende Statement löscht alle Doubletten, läßt aber den ältest Datensatz stehen.

delete from table1 where id in (
select t2.id
from table1 t1
join table1 t2 on t1.id < t2.id and t1.name = t2.name
)

Der Syntax ist vom MSSQL sollte aber im MySQL auch gehen.

Jetzt kannst du die autoincrement-spalte wieder löschen.
10.02.2011
Floyd 11,0k 3 9
Floyd 11,0k 3 9
0
Wenn alle Felder gleich sind, wird's schwierig das mit einem SQL-Statement hinzukriegen, bzw. fällt mir ad hoc keine Lösung dazu ein. Da müsste schon ein Programm zur Bereinigung her, das alle Datensätze bis auf den letzten löscht.

doch (Idee während des Schreibens): Kannst du der Tabelle ein neues Feld mit AutoIncrement hinzufügen? Dann könntest du Konstantins Lösung anwenden, danach dieses Feld wieder entfernen und den Primärschlüssel wie gewünscht setzen.
10.02.2011
Maria Simlinger 864 8
??????????
Batman 11.02.2011
0
Wenn dir das ganze mit mysql zu kompliziert ist ( obwohl ja schon einige gute Vorschläge kamen) kannst du deine Tabelle auch als csv exportieren, mit excel öffnen: Unter "Daten"--> "Duplikate entfernen" auswählen und dort die Spalten auswählen in denen nach doppelten Einträgen gesucht werden soll. Dann das ganze speichern und wieder in mysql importieren.
Vielleicht als Lösungsalternative für die Leute, die mit mysql direkt nicht soviel anfangen können.

Stift
11.02.2011
4-Farben-Stift 165 5

Stelle deine Mysql-Frage jetzt!