2010-09-26 31 views
12

que tengo una base de datos MySQL:Mostrar todas las filas de MySQL que contienen el mismo valor

ID | Name 
1 | Bob 
2 | James 
3 | Jack 
4 | Bob 
5 | James 

¿Cómo voy a devolver una lista de todas las columnas donde el mismo nombre aparece más de una vez, por ejemplo, que había gustaría volver esto:

1 | Bob 
2 | James 
4 | Bob 
5 | James 

he escrito una consulta recuento:

SELECT Name, COUNT(Name) 
AS NumOccurrences 
FROM table 
GROUP BY Name 
HAVING (COUNT(Name) > 1) 

Pero eso sólo devuelve algo como esto:

Bob | 2 
James | 2 

Considerando que quiero devolver las filas completas devueltas.

Cualquier ayuda sería muy apreciada, gracias.

Respuesta

7

Intentar esta consulta SQL:

select distinct a.name, a.id 
from table a, table b 
where a.name = b.name and a.id != b.id 
+0

Creo que esta debería ser la respuesta seleccionada –

+0

¿Cómo aplica esto cuando busca en la misma tabla? – Pim

20

Puede hacerlo con un sub selecciona

SELECT * FROM table WHERE Name IN (
    SELECT Name FROM table GROUP BY Name HAVING count(*) > 1 
) 

Además, si su partido distinción es varias columnas, puede utilizar conjuntos cartesianas:

SELECT * FROM table WHERE (firstName, lastName) IN (
    SELECT firstName, lastName FROM table GROUP BY firstName, lastName HAVING count(*) > 1 
) 
+0

Fantástico; muchas gracias. – Simon

+0

¡Solución impresionante! Trabajó para mí también. Muchas gracias. – Devner

+0

esto es demasiado lento para una tabla grande y muchas columnas, lo siento – Novasol

4

Probar este

SELECT Name, COUNT(Name) AS NumOccurrences 
FROM table 
GROUP BY Name 
HAVING COUNT(*) > 0 
Cuestiones relacionadas