Question Trouver des valeurs en double dans MySQL


J'ai une table avec une colonne varchar, et je voudrais trouver tous les enregistrements qui ont des valeurs en double dans cette colonne. Quelle est la meilleure requête que je peux utiliser pour trouver les doublons?


598
2018-03-27 04:22


origine


Réponses:


Fait une SELECT avec un GROUP BY clause. Disons prénom est la colonne que vous voulez trouver en double:

SELECT name, COUNT(*) c FROM table GROUP BY name HAVING c > 1;

Cela retournera un résultat avec le prénom valeur dans la première colonne, et un compte du nombre de fois que cette valeur apparaît dans la seconde.


1184
2018-03-27 04:24



SELECT varchar_col
FROM table
GROUP BY varchar_col
HAVING count(*) > 1;

172
2018-03-27 04:27



SELECT  *
FROM    mytable mto
WHERE   EXISTS
        (
        SELECT  1
        FROM    mytable mti
        WHERE   mti.varchar_column = mto.varchar_column
        LIMIT 1, 1
        )

Cette requête renvoie des enregistrements complets, pas seulement distincts varchar_column's.

Cette requête n'utilise pas COUNT(*). S'il y a beaucoup de doublons, COUNT(*) est cher, et vous n'avez pas besoin de l'ensemble COUNT(*), vous avez juste besoin de savoir s'il y a deux lignes avec la même valeur.

Avoir un index sur varchar_column va, bien sûr, accélérer cette requête grandement.


133
2018-03-27 10:54



Construire hors de la réponse de levik pour obtenir les ID des lignes en double, vous pouvez faire un GROUP_CONCAT si votre serveur le prend en charge (cela retournera une liste d'identifiants séparés par des virgules).

SELECT GROUP_CONCAT(id), name, COUNT(*) c FROM documents GROUP BY name HAVING c > 1;

98
2018-02-19 00:56



En supposant que votre table est nommée TableABC et la colonne que vous voulez est Col et la clé primaire à T1 est la clé.

SELECT a.Key, b.Key, a.Col 
FROM TableABC a, TableABC b
WHERE a.Col = b.Col 
AND a.Key <> b.Key

L'avantage de cette approche par rapport à la réponse ci-dessus est qu'elle donne la clé.


9
2018-03-27 04:29



SELECT * 
FROM `dps` 
WHERE pid IN (SELECT pid FROM `dps` GROUP BY pid HAVING COUNT(pid)>1)

8
2018-05-22 14:48



Pour trouver combien d'enregistrements sont dupliqués dans la colonne Nom de l'employé, la requête ci-dessous est utile;

Select name from employee group by name having count(*)>1;

8
2017-11-24 12:12



Ma dernière requête incorporé quelques-unes des réponses ici qui ont aidé - combinaison de group by, count & GROUP_CONCAT.

SELECT GROUP_CONCAT(id), `magento_simple`, COUNT(*) c 
FROM product_variant 
GROUP BY `magento_simple` HAVING c > 1;

Cela fournit l'identifiant des deux exemples (séparés par des virgules), le code à barres dont j'avais besoin et le nombre de doublons.

Changez le tableau et les colonnes en conséquence.


5
2018-05-05 02:38



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

Remplacer ville avec votre table. Remplacer prénom avec votre nom de champ


5
2018-01-25 05:59



J'ai vu le résultat ci-dessus et la requête fonctionnera très bien si vous avez besoin de vérifier la valeur d'une seule colonne qui sont en double. Par exemple email.

Mais si vous avez besoin de vérifier avec plus de colonnes et que vous souhaitez vérifier la combinaison du résultat, cette requête fonctionnera correctement:

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)

4
2018-05-30 07:42



Vous trouverez ci-dessous tous les id_produits qui sont utilisés plusieurs fois. Vous obtenez seulement un seul enregistrement pour chaque product_id.

SELECT product_id FROM oc_product_reward GROUP BY product_id HAVING count( product_id ) >1

Code tiré de: http://chandreshrana.blogspot.in/2014/12/find-duplicate-records-based-on-any.html


3
2018-05-30 13:52