Pregunta Encontrar valores duplicados en MySQL


Tengo una tabla con una columna varchar, y me gustaría encontrar todos los registros que tienen valores duplicados en esta columna. ¿Cuál es la mejor consulta que puedo usar para encontrar los duplicados?


598
2018-03-27 04:22


origen


Respuestas:


Haz un SELECT con un GROUP BY cláusula. Digamos nombre es la columna en la que desea duplicar:

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

Esto devolverá un resultado con el nombre valor en la primera columna, y un recuento de cuántas veces ese valor aparece en el segundo.


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
        )

Esta consulta devuelve registros completos, no solo distintos varchar_columnes

Esta consulta no usa COUNT(*). Si hay muchos duplicados, COUNT(*) es costoso, y no necesitas el todo COUNT(*), solo necesita saber si hay dos filas con el mismo valor.

Tener un índice en varchar_column Por supuesto, acelerará esta consulta en gran medida.


133
2018-03-27 10:54



Aprovechando la respuesta de Levik para obtener las identificaciones de las filas duplicadas, puede hacer una GROUP_CONCAT si su servidor lo admite (esto devolverá una lista de identificadores separados por comas).

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

98
2018-02-19 00:56



Suponiendo que su tabla se llama TableABC y la columna que desea es Col y la clave principal para T1 es Key.

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

La ventaja de este enfoque sobre la respuesta anterior es que da la clave.


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



Para encontrar cuántos registros son duplicados en la columna de nombre en Employee, la siguiente consulta es útil;

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

8
2017-11-24 12:12



Mi última consulta incorporó algunas de las respuestas que ayudaron, combinando group by, count y GROUP_CONCAT.

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

Esto proporciona la identificación de ambos ejemplos (separados por comas), el código de barras que necesito y cuántos duplicados.

Cambie la tabla y las columnas en consecuencia.


5
2018-05-05 02:38