Encuentra filas que tienen el mismo valor en una columna en MySQL

Resuelto bobo asked hace 14 años • 10 respuestas

En una tabla [miembro], algunas filas tienen el mismo valor para la emailcolumna.

login_id | email
---------|---------------------
john     | john123@hotmail.com
peter    | peter456@gmail.com
johnny   | john123@hotmail.com
...

Algunas personas usaron un login_id diferente pero la misma dirección de correo electrónico; no se estableció ninguna restricción única en esta columna. Ahora necesito encontrar estas filas y ver si se deben eliminar.

¿Qué declaración SQL debo usar para encontrar estas filas? (MySQL5)

bobo avatar Nov 24 '09 05:11 bobo
Aceptado

Esta consulta le dará una lista de direcciones de correo electrónico y cuántas veces se utilizan, con las direcciones más utilizadas primero.

SELECT email,
       count(*) AS c
FROM TABLE
GROUP BY email
HAVING c > 1
ORDER BY c DESC

Si quieres las filas completas:

select * from table where email in (
    select email from table
    group by email having count(*) > 1
)
Scott Saunders avatar Nov 23 '2009 22:11 Scott Saunders
select email from mytable group by email having count(*) >1
HLGEM avatar Nov 23 '2009 22:11 HLGEM

Aquí hay una consulta para encontrar emaillos que se usan para más de uno login_id:

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

Necesitará una segunda consulta (anidada) para obtener la lista de login_idby email.

Ivan Nevostruev avatar Nov 23 '2009 22:11 Ivan Nevostruev

La primera parte de la respuesta aceptada no funciona para MSSQL.
Esto funcionó para mí:

select email, COUNT(*) as C from table 
group by email having COUNT(*) >1 order by C desc
Sergey Makhonin avatar Nov 08 '2013 09:11 Sergey Makhonin