2010-01-13 9 views
5

¿Puedo usar una consulta SQL para buscar registros donde un campo es idéntico en ambos? Es decir, ¿puedo usar la siguiente tabla y devolver 1,3 (los ID) al comparar las columnas de nombre (e ignorar el teléfono)?¿Es posible que SQL encuentre registros con duplicados?

 
    ID | Name | Phone 

    1 | Bob | 5555555555 
    2 | John | 1234567890 
    3 | Bob | 1515151515 
    4 | Tim | 5555555555

Respuesta

10

para obtener todos los nombres que existen más de una vez puede ejecutar esta declaración:

SELECT Name FROM People GROUP BY Name HAVING COUNT(*)>1; 
+1

Para obtener los ID probablemente tenga que usar la declaración anterior con otra instrucción de selección. Algo así como: Identificación seleccionar entre [Nombre de la tabla] DONDE NOMBRE EN (seleccione el nombre desde GRUPO [Nombre de la tabla] POR Nombre CUENTA QUE TIENE (*)> 1) funcionaría –

+1

Una cosa que me gustaría añadir es que se necesita tener cuidado al usar Names como identificador para decidir si un registro es un duplicado o no, porque a menos que esté seguro de que nunca habrá dos personas con el mismo nombre en su mesa, se meterá en problemas. –

2

para obtener el ID de los duplicados "1,3" de esa manera concatenan utilizar GROUP_CONCAT:

SELECT GROUP_CONCAT(ID SEPARATOR ',') 
FROM Table 
GROUP BY Name 
HAVING COUNT(*) > 1 
0

Otro - no necesariamente eficiente - forma de hacerlo es con una autocombinación:

SELECT P1.Id, P2.Id 
    FROM People P1, People P2 
WHERE P1.Id < P2.Id 
    AND P1.Name = P2.Name; 

La primera condición asegura que solo vea el par (1,3) y no los pares extraños (3,1) o las filas idénticas (1,1), (3,3).

Cuestiones relacionadas