Suche nach doppelten Werten in einer SQL-Tabelle
Es ist einfach, mit einem Feld Duplikate zu finden:
SELECT name, COUNT(email)
FROM users
GROUP BY email
HAVING COUNT(email) > 1
Wenn wir also eine Tabelle haben
ID NAME EMAIL
1 John asd@asd.com
2 Sam asd@asd.com
3 Tom asd@asd.com
4 Bob bob@asd.com
5 Tom asd@asd.com
Diese Abfrage liefert uns John, Sam, Tom, Tom, weil sie alle die gleiche E-Mail
haben.
Was ich jedoch möchte, ist, Duplikate mit derselben "E-Mail" und "Name" zu erhalten.
Das heißt, ich möchte "Tom", "Tom" erhalten.
Der Grund, warum ich das brauche: Ich habe einen Fehler gemacht und erlaubt, doppelte Werte für Name
und E-Mail
einzufügen. Jetzt muss ich die Duplikate entfernen/ändern, also muss ich sie zuerst finden.
1777
3
Gruppieren Sie einfach auf beiden Spalten.
Hinweis: Der ältere ANSI-Standard sieht vor, dass alle nicht aggregierten Spalten im GROUP BY enthalten sind, doch hat sich dies mit dem Konzept der "funktionalen Abhängigkeit" geändert:
Die Unterstützung ist nicht konsistent:
sql_mode=only_full_group_by
:Versuchen Sie dies:
OUTPUT:
wenn Sie die IDs der Dups haben wollen, verwenden Sie dies:
OUTPUT:
um die Duplikate zu löschen, versuchen Sie:
OUTPUT:
Versuchen Sie dies: