945 Stimmen

Suche nach doppelten Werten in MySQL

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?

9voto

Adam Fischer Punkte 1036

Ich sehe keine JOIN-Ansätze, die im Hinblick auf Duplikate viele Verwendungen haben.

Mit diesem Ansatz erhalten Sie tatsächlich doppelte Ergebnisse.

SELECT t1.* FROM my_table as t1 
LEFT JOIN my_table as t2 
ON t1.name=t2.name and t1.id!=t2.id 
WHERE t2.id IS NOT NULL 
ORDER BY t1.name

8voto

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;

DB Fiddle Demo

8voto

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)

7voto

Lalit Patel Punkte 109
SELECT t.*,(select count(*) from city as tt
  where tt.name=t.name) as count
  FROM `city` as t
  where (
     select count(*) from city as tt
     where tt.name=t.name
  ) > 1 order by count desc

Ersetzen Sie Stadt mit Ihrem Tisch. Ersetzen Name mit Ihrem Feldnamen

6voto

Ich habe mich dadurch verbessert:

SELECT 
    col, 
    COUNT(col)
FROM
    table_name
GROUP BY col
HAVING COUNT(col) > 1;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X