Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta de los registros con un campo duplicado

Estas en el tema de Consulta de los registros con un campo duplicado en el foro de Mysql en Foros del Web. Hola quiero hacer una consulta que me de TODOS los registros que tienen un duplicado en un campo específico. No se si es posible porque ...
  #1 (permalink)  
Antiguo 25/10/2005, 12:04
Avatar de SkyWalker  
Fecha de Ingreso: enero-2002
Mensajes: 39
Antigüedad: 22 años, 3 meses
Puntos: 0
Consulta de los registros con un campo duplicado

Hola quiero hacer una consulta que me de TODOS los registros que tienen un duplicado en un campo específico. No se si es posible porque he intentado varias cosas y lo más parecido es que me devuelva los duplicados pero agrupados.

Es decir, si tengo 5 registros:
ID - NOMBRE
1 - pepe
2 - pepe
3 - maria
4 - juan
5 - maria

El resultado que pretendo es que me devuelva

1 - pepe
2 - pepe
3 - maria
5 - maria

y lo que consigo es

1 -pepe
3 -maria


Código:
SELECT * FROM tabla HAVING COUNT(campo)>1
Es posible hacerlo sin que agrupe?


Trabajo con php y se puede hacer una función para conseguir esto, pero es complicar la cosa, asi que si se puede hacer con una consulta, me evito un montón.

Saludos, gracias por la ayuda.
  #2 (permalink)  
Antiguo 26/10/2005, 02:13
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
select * from tabla T where nombre=(select nombre from tabla where id<>T.id)
  #3 (permalink)  
Antiguo 26/10/2005, 11:02
Avatar de SkyWalker  
Fecha de Ingreso: enero-2002
Mensajes: 39
Antigüedad: 22 años, 3 meses
Puntos: 0
Gracias por la ayuda, pero no me rula creo que entiendo la consulta, pero haciendo esto ....

SELECT * FROM tabla WHERE nombre = (SELECT nombre FROM tabla
WHERE id <> tabla.id)


No me devuelve ningún registro pero sin error.

y haciendo esto .... dónde entiendo que T es un alias...

SELECT * FROM tabla T WHERE nombre = (SELECT nombre FROM tabla WHERE id <> T.id )

Me da el siguiente error:
#1242 - Subquery returns more than 1 row

¿Es posible que no pueda hacer el igual si da más de una fila? a lo mejor es la versión de mysql ... porque si es así, pos me parece que me toca hacer una función con php
  #4 (permalink)  
Antiguo 26/10/2005, 12:19
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 2 meses
Puntos: 3
prueba con esta consulta:
Código:
select t1.id, t1.nombre
from tabla t1
inner join tabla t2
  on t2.id <> t1.id
  and t2.nombre = t1.nombre
order by t1.id
observa que se esta haciendo un inner join dos veces con la misma tabla.
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #5 (permalink)  
Antiguo 26/10/2005, 15:12
Avatar de SkyWalker  
Fecha de Ingreso: enero-2002
Mensajes: 39
Antigüedad: 22 años, 3 meses
Puntos: 0
Perfecto, va de cohones... asias!

Ahora si es posible ... lo que me gusta es aprender..., xactamente que hace el INNER JOIN... ?

Creo que los tiros van por aquí...

Lo que hace es digamos nombrar a la misma tabla de dos maneras t1 y t2 como si fueran dos diferentes (con un alias AS que está omitido por que MySQL lo acepta) y luego seleccionar los id's que sean distintos (asi cogemos todos los registros) y luego donde el campo de union entre las dos tablas coincida... no se si me expreso bien, pero estoy en lo cierto?

Gracias por todo, saludos.
  #6 (permalink)  
Antiguo 27/10/2005, 09:02
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 2 meses
Puntos: 3
exactamente.

el inner join se utiliza para linkar dos tablas.
esto:

select *
from tabla1, tabla2
where tabla1.id = tabla2.id

es lo mismo que esto:

select *
from tabla1
inner join tabla2 on tabla2.id = tabla1.id

lo que pasa que la segunda forma es mas eficiente y mas clara.
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:29.