malnefrage.de
malnefrage.de
Menü
Facebook
Twitter
E-Mail
Bookmark
weitere
Ratgeber-Community für Fragen & Antworten:
Forum mit Tipps, Hilfe und Ratschläge
Forum Frage stellen! Neue Fragen Neue Antworten Ratgeber Login
Frage
Frage
von prilo578

MySQL doppelte Einträge in Spalte finden?

Wie kann man in einer MySQL Datenbank doppelte Einträge in einer Spalte finden und löschen?
Wenn ich zum Beispiel eine Kundendatenbank habe in der Kunden mit einer Email Adresse gespeichert sind, wie kann ich dann doppelte Email Adressen herausfinden, um diese zu löschen?

Antwort
Antwort
von sqlgeek
Um doppelte Einträge in einer Spalte in MySQL zu finden, kannst du die GROUP BY-Klausel und die HAVING-Klausel verwenden.

Hier ist ein Beispiel, das zeigt, wie du doppelte Email-Adressen in einer Kundendatenbank finden kannst:
SELECT email, COUNT(*) 
FROM kundendatenbank 
GROUP BY email 
HAVING COUNT(*) > 1;
Dieser Befehl zählt die Anzahl der Vorkommen jeder Email-Adresse in der Kundendatenbank und gibt nur die Email-Adressen aus, die mehr als einmal vorkommen. Dadurch kannst du doppelte Email-Adressen identifizieren.

Um doppelte Einträge in der Kundendatenbank zu löschen, kannst du den DELETE-Befehl verwenden. Hier ist ein Beispiel:
DELETE FROM kundendatenbank 
WHERE email IN (
    SELECT email 
    FROM kundendatenbank 
    GROUP BY email 
    HAVING COUNT(*) > 1
);
Achtung: Dieser Befehl löscht alle Zeilen in der Kundendatenbank, die eine Email-Adresse haben, die mehr als einmal vorkommt. Beachte, dass mit dieser Abfrage alle doppelten Einträge aus der Datenbank gelöscht werden! Daher bitte vorher prüfen, ob dies das gewünschte Verhalten sein soll, bevor du den Befehl ausführst.
Kommentar von prilo578
Und wie muss die Abfrage geändert werden, damit nicht alle doppelten Einträge aus der Datenbank gelöscht werden, sondern nur die Dubletten?
Kommentar von sqlgeek
Um nur die doppelten Einträge in einer Spalte zu löschen und die einzigartigen Einträge beizubehalten, musst du sicherstellen, dass jeder einzigartige Eintrag mindestens einmal in der Datenbank vorhanden ist, bevor die Dubletten gelöscht werden. Du kannst dies mit einer temporären Tabelle erreichen, die die einzigartigen Einträge enthält.

Hier ist ein Beispiel, das zeigt, wie du doppelte Email-Adressen in einer Kundendatenbank finden und nur die Dubletten löschen kannst:

1. Erstelle eine temporäre Tabelle, um nur die einzigartigen Email-Adressen zu speichern:
CREATE TEMPORARY TABLE tmp SELECT MIN(id) AS id FROM kundendatenbank GROUP BY email;
2. Lösche alle Dubletten aus der Kundendatenbank:
DELETE FROM kundendatenbank WHERE id NOT IN (SELECT id FROM tmp);
Dieser Befehl löscht alle Zeilen in der Kundendatenbank, deren ID nicht in der temporären Tabelle enthalten ist, die nur die einzigartigen Email-Adressen enthält. Dadurch werden nur die Dubletten gelöscht und die einzigartigen Einträge bleiben erhalten.

3. Lösche die temporäre Tabelle, die nicht mehr benötigt wird:
DROP TEMPORARY TABLE tmp;
Dieser Befehl löscht die temporäre Tabelle, wenn diese nicht mehr benötigt wird.


Antwort
Antwort
von coder
Du kannst die Abfrage wie folgt absetzen, um doppelte Datensätze in einer MySQL Datenbank zu finden:
SELECT 
    email, 
    COUNT(email)
FROM
    kunden
GROUP BY email
HAVING COUNT(email) > 1
In php oder einer anderen Scriptsprache kannst du das Ergebnis dann weiter verarbeiten, um die Datensätze bspw. zu löschen.
Ähnliche Fragen
Ich stehe vor einem kleinen Problem. Und zwar möchte ich in einer MySQL-Abfrage nach mehreren Wörtern gleichzeitig suchen. Beispiel meines Suchterms: ...
Hallo, mein Problem ist das der MySQL Server nicht mehr startet. Ich habe auf einem Windows 10 Rechner zu Testzwecken XAMPP installiert. Bis gestern hat ...
Wie kann man die aktuelle MySQL Datenbank Version herausfinden? Wo kann ich schauen welche Version von MySQL auf dem Server läuft und wo die Datenbank ...
Wie kann man in MySQL eine Volltextsuche mit 3 Zeichen realisieren? Ich versuche über MATCH AGAINST eine MySQL-Volltextsuche über den FULLTEXT Index der ...
Wie kann ich mich beim MySQL Server auf der Konsole unter Linux anmelden? Ich habe mich per SSH auf meinem Root Server angemeldet. Wie kann ich mich nun ...
Nächste Frage

Die auf malnefrage.de veröffentlichten Fragen und Antworten sind Meinungsäußerungen der jeweiligen User. Da die Aussagen nicht geprüft werden, kann die Richtigkeit der Inhalte nicht gewährleistet werden.