Es ist einfach, Duplikate mit einem Feld zu finden:
SELECT name, COUNT(email)
FROM users
GROUP BY email
HAVING COUNT(email) > 1
Also, wenn wir einen Tisch haben
ID NAME EMAIL
1 John [email protected]
2 Sam [email protected]
3 Tom [email protected]
4 Bob [email protected]
5 Tom [email protected]
Diese Abfrage gibt uns John, Sam, Tom, Tom, weil sie alle das gleiche haben email
.
Was ich jedoch möchte, ist, Duplikate mit dem gleichen email
und zu erhalten name
.
Das heißt, ich möchte "Tom", "Tom" bekommen.
Der Grund, warum ich das brauche: Ich habe einen Fehler gemacht und durfte Duplikate name
und email
Werte einfügen . Jetzt muss ich die Duplikate entfernen / ändern, so muss ich finden sie zuerst.
sql
duplicates
Alex
quelle
quelle
name
Felds in SELECT nicht funktioniert .Antworten:
Gruppieren Sie einfach beide Spalten.
Hinweis: Der ältere ANSI-Standard sieht vor, dass alle nicht aggregierten Spalten in GROUP BY enthalten sind. Dies hat sich jedoch mit der Idee der "funktionalen Abhängigkeit" geändert :
Der Support ist nicht konsistent:
sql_mode=only_full_group_by
:quelle
>1
=1
Versuche dies:
AUSGABE:
Wenn Sie die IDs der Dups möchten, verwenden Sie Folgendes:
AUSGABE:
Um die Duplikate zu löschen, versuchen Sie:
AUSGABE:
quelle
Versuche dies:
quelle
Wenn Sie die Duplikate löschen möchten, ist dies viel einfacher, als gerade / ungerade Zeilen in einer dreifachen Unterauswahl zu finden:
Und so zu löschen:
IMHO viel einfacher zu lesen und zu verstehen
Hinweis: Das einzige Problem besteht darin, dass Sie die Anforderung ausführen müssen, bis keine Zeilen gelöscht wurden, da Sie jedes Mal nur 1 von jedem Duplikat löschen
quelle
You can't specify target table 'users' for update in FROM clause
Versuche Folgendes:
quelle
quelle
Ein bisschen zu spät zur Party, aber ich fand eine wirklich coole Lösung, um alle doppelten IDs zu finden:
quelle
GROUP_CONCAT
nach einer vorgegebenen Länge aufhört, sodass Sie möglicherweise nicht alleid
s erhalten.Versuchen Sie diesen Code
quelle
Dadurch werden alle doppelten Datensätze mit Ausnahme eines Datensatzes aus jeder Gruppe von doppelten Datensätzen ausgewählt / gelöscht. Beim Löschen bleiben also alle eindeutigen Datensätze + ein Datensatz aus jeder Gruppe der Duplikate übrig.
Duplikate auswählen:
Duplikate löschen:
Beachten Sie größere Mengen an Datensätzen, da dies zu Leistungsproblemen führen kann.
quelle
Wenn Sie mit Oracle arbeiten, ist dieser Weg vorzuziehen:
quelle
quelle
Wenn Sie sehen möchten, ob Ihre Tabelle doppelte Zeilen enthält, habe ich die folgende Abfrage verwendet:
quelle
Das ist die einfache Sache, die ich mir ausgedacht habe. Es verwendet einen allgemeinen Tabellenausdruck (CTE) und ein Partitionsfenster (ich denke, diese Funktionen sind in SQL 2008 und höher enthalten).
In diesem Beispiel werden alle Schüler mit doppeltem Namen und dob gefunden. Die Felder, die Sie auf Duplizierung prüfen möchten, befinden sich in der OVER-Klausel. Sie können beliebige andere Felder in die Projektion aufnehmen.
quelle
quelle
Wie können wir die doppelten Werte zählen? Entweder wird es 2 Mal oder mehr als 2 Mal wiederholt. Zählen Sie sie einfach, nicht gruppenweise.
so einfach wie
quelle
Durch die Verwendung von CTE können wir auch einen doppelten Wert wie diesen finden
quelle
quelle
SELECT id, COUNT(id) FROM table1 GROUP BY id HAVING COUNT(id)>1;
Ich denke, dies wird richtig funktionieren, um wiederholte Werte in einer bestimmten Spalte zu suchen.
quelle
quelle
Dies sollte auch funktionieren, vielleicht versuchen Sie es.
Besonders gut in Ihrem Fall Wenn Sie nach Duplikaten suchen, die ein Präfix oder eine allgemeine Änderung haben, wie z. B. eine neue Domain in der E-Mail. Dann können Sie replace () in diesen Spalten verwenden
quelle
Wenn Sie doppelte Daten (nach einem oder mehreren Kriterien) suchen und die tatsächlichen Zeilen auswählen möchten.
http://developer.azurewebsites.net/2014/09/better-sql-group-by-find-duplicate-data/
quelle
quelle
COUNT
ohne verwendenGROUP BY
, es sei denn, es bezieht sich auf die gesamte Tabelle.Löschen von Datensätzen, deren Namen doppelt vorhanden sind
quelle
So überprüfen Sie aus einem doppelten Datensatz in einer Tabelle.
oder
So löschen Sie den doppelten Datensatz in einer Tabelle.
oder
quelle
SELECT column_name,COUNT(*) FROM TABLE_NAME GROUP BY column1, HAVING COUNT(*) > 1;
quelle
Wir können hier verwenden, die an Aggregatfunktionen arbeiten, wie unten gezeigt
Hier werden als zwei Felder id_account und data mit Count (*) verwendet. Es werden also alle Datensätze angezeigt, die in beiden Spalten mehr als einmal die gleichen Werte haben.
Wir haben aus irgendeinem Grund fälschlicherweise versäumt, Einschränkungen in die SQL Server-Tabelle einzufügen, und die Datensätze wurden in allen Spalten mit Front-End-Anwendung doppelt eingefügt. Dann können wir die folgende Abfrage verwenden, um doppelte Abfragen aus der Tabelle zu löschen.
Hier haben wir alle unterschiedlichen Datensätze der ursprünglichen Tabelle genommen und die Datensätze der ursprünglichen Tabelle gelöscht. Wieder haben wir alle unterschiedlichen Werte von der neuen Tabelle in die ursprüngliche Tabelle eingefügt und dann die neue Tabelle gelöscht.
quelle
Vielleicht möchten Sie dies versuchen
quelle
Das Wichtigste dabei ist, die schnellste Funktion zu haben. Auch Indizes von Duplikaten sollten identifiziert werden. Self Join ist eine gute Option, aber um eine schnellere Funktion zu haben, ist es besser, zuerst Zeilen mit Duplikaten zu suchen und dann mit der Originaltabelle zu verbinden, um die ID von doppelten Zeilen zu ermitteln. Ordnen Sie schließlich nach einer beliebigen Spalte außer id, dass doppelte Zeilen nebeneinander vorhanden sind.
quelle
Sie können das Schlüsselwort SELECT DISTINCT verwenden, um Duplikate zu entfernen. Sie können auch nach Namen filtern und alle Personen mit diesem Namen in eine Tabelle aufnehmen.
quelle
Der genaue Code hängt davon ab, ob Sie auch doppelte Zeilen oder nur unterschiedliche IDs mit derselben E-Mail-Adresse und demselben Namen suchen möchten. Wenn id ein Primärschlüssel ist oder auf andere Weise eine eindeutige Einschränkung aufweist, existiert diese Unterscheidung nicht, aber die Frage gibt dies nicht an. Im ersteren Fall können Sie Code verwenden, der in mehreren anderen Antworten angegeben ist:
Im letzteren Fall würden Sie verwenden:
quelle