Ich habe eine Tabelle mit einer varchar-Spalte und möchte alle Datensätze finden, die doppelte Werte in dieser Spalte haben. Was ist die beste Abfrage, die ich verwenden kann, um die Duplikate zu finden?
Antworten
Zu viele Anzeigen?
Adam Fischer
Punkte
1036
Lukasz Szozda
Punkte
137580
Ich ziehe es vor, Fensterfunktionen (MySQL 8.0+) zu verwenden, um Duplikate zu finden, weil ich die gesamte Zeile sehen kann:
WITH cte AS (
SELECT *
,COUNT(*) OVER(PARTITION BY col_name) AS num_of_duplicates_group
,ROW_NUMBER() OVER(PARTITION BY col_name ORDER BY col_name2) AS pos_in_group
FROM table
)
SELECT *
FROM cte
WHERE num_of_duplicates_group > 1;
Nicht registrierter Benutzer
Punkte
0
Ich sah das obige Ergebnis und Abfrage wird gut funktionieren, wenn Sie einzelne Spalte Wert, die doppelt sind zu überprüfen müssen. Zum Beispiel E-Mail.
Wenn Sie jedoch mit mehreren Spalten prüfen müssen und die Kombination des Ergebnisses prüfen möchten, wird diese Abfrage gut funktionieren:
SELECT COUNT(CONCAT(name,email)) AS tot,
name,
email
FROM users
GROUP BY CONCAT(name,email)
HAVING tot>1 (This query will SHOW the USER list which ARE greater THAN 1
AND also COUNT)
Lalit Patel
Punkte
109
Nhlanhla Rihlapfu
Punkte
61