2011-05-19 11 views
10

Tengo una gran tabla con los siguientes datos sobre los usuarios.Encontrar duplicados en SQL

social security number 
name 
address 

Quiero encontrar todos los posibles duplicados en la tabla donde el SSN es igual pero el nombre no es

Mi intento es:

SELECT * FROM Table t1 
WHERE (SELECT count(*) from Table t2 where t1.name <> t2.name) > 1 

Respuesta

14

Una agrupación de SSN debe hacerlo

SELECT 
    ssn 
FROM 
    Table t1 
GROUP BY 
    ssn 
HAVING COUNT(*) > 1 

..o si tiene muchas filas por SSN y sólo quiere encontrar nombres duplicados)

... 
HAVING COUNT(DISTINCT name) > 1 

Editar, oops, mal entendido

SELECT 
    ssn 
FROM 
    Table t1 
GROUP BY 
    ssn 
HAVING MIN(name) <> MAX(name) 
+0

su respuesta parece s para darme filas donde el nombre es el mismo. Quiero filas donde el nombre NO es igual a – Mark

+0

@Mark: el título dice "Buscar duplicados", lo que me engañó. Corregido – gbn

+0

Pensé que necesitaría unirme. Me encanta la idea min/max. Gracias – Mark

0

Esto manejar más de dos registros con ssn duplicados:

select count(*), name from table t1, ( 
    select count(*) ssn_count, ssn 
    from table 
    group by ssn 
    having count(*) > 1 
) t2 
where t1.ssn = t2.ssn 
group by t1.name 
having count(*) <> t2.ssn_count 
Cuestiones relacionadas