2011-04-29 40 views
6

tiene una tabla con 4 columnas:cómo encontrar personas con el mismo apellido?

clave/nombre/apellido/nombre medio primaria

Cómo escribir consultas SQL para encontrar gente que tiene el mismo nombre de la familia?

1/Ivan/Ivanov/Ivanovich

2/Petr/Levinsky/Aleksandrovich

3/Alex/Ivanov/Albertovich

debe devolver Ivan y Alex

Gracias

Respuesta

9

En SQL estándar puede simplemente unirse a la mesa con ella misma:

select a.name, b.name 
from t as a, t as b 
where a.surname = b.surname and a.id < b.id 

donde t es su mesa y id es la columna de clave principal.

Esto devuelve todos los pares distintos de nombres para cada apellido que tiene entradas múltiples. Es posible que desee agregar surname a la lista de columnas seleccionadas.

0

Quiere agrupar por apellido y luego usar una cláusula HAVING para buscar cualquier grupo que tenga> 1.

No comprobado:

SELECT 
    name 
FROM 
    theTable 
WHERE Surname IN (
    SELECT 
     Surname 
    FROM 
     theTable 
    GROUP BY 
     Surname 
    HAVING 
     COUNT(Surname) > 1) 
+1

Esto no hace lo que el OP está pidiendo (devolver nombres). – NPE

+0

@aix - ¿en serio? Supongo que si se trata de una entrevista, sabrá un poco sobre SQL y podrá unirse a los resultados de la consulta anterior. – Fermin

-1
select surname,group_concat(firstname) 
from people 
group by surname 
having count(firstname)> 1; 
0

En cuanto a mí manera más fácil es agrupar registros por el apellido y luego seleccione aquellos con recuento de más de 1.

8

Si usted quiere encontrar exactamente los nombres a continuación, debe en primer lugar encontrar todos los apellidos que aparecen más de una vez y encontrar todos los nombres:

select name 
    from t 
    where surname in (select surname from t group by surname having count(surname) > 1); 
+1

+1 la única respuesta correcta hasta el momento – Martin

Cuestiones relacionadas