Con registros repetidos me refiero tanto a registros con todos los campos iguales como a registros que tienen el mismo valor en uno o más campos. Vamos a ver el caso más sencillo que es buscar los registros que tienen el mismo valor en un campo determinado. Ojo, cuando digo el mismo valor me refiero a cualquier valor, no a un valor concreto (si no sería demasiado obvio). P.e. buscar a todos los empleados que viven en la misma calle o todas las personas que son compatriotas (tienen la misma nacionalidad). Esto resulta especialmente útil cuando queremos ver qué registros tienen el valor repetido en un campo que pensamos usar como clave o por la razón que sea debería ser único y no es así.
select *
from Tabla T1
where T1.Campo in (select T2.Campo from Tabla T2 group by T2.Campo having count(*) > 1);
En este caso miramos los valores de Campo que se repiten más de una vez. Si en lugar de 1 ponemos otro número podremos ver aquellos registros que están repetidos 3, 4 veces o más (o menos, o como necesitemos). Si lo que queremos es mirar más de un campo, haríamos algo así:
select *
from Tabla T1
where T1.Campo, T1.Campo2 in (select T2.Campo, T2.Campo2 from Tabla T2 group by T2.Campo, T2.Campo2 having count(*) > 1);
sin mucho parametro:
from tabla
group by campo
having count(campo)>1
By: ivansud on May 30, 2014
at 8:00
OK, probe la de alberto y me fue muy bien en la consulta de unos 32,000 registros. gracias son unos maestros.
select id, campo, count(campo)
from tabla
group by campo
having count(campo)>1;
By: cesar cas on noviembre 23, 2012
at 21:54
si la tabla es grande es mucho más rapida la siguiente consulta
select id, campo, count(campo)
from tabla
group by campo
having count(campo)>1;
By: Alberto on May 17, 2012
at 10:50
Excelentes trucos, muchas gracias por el aporte, soy novato en consultas de oracle y estos consejos me ayudaron muy bien. La consulta funcionó a la perfeccion con el ejemplo de Alberto.
TOMAIO
By: TOMAIO on agosto 4, 2012
at 17:30
ahh lo otro quiten el mayor es mas rápido
SELECT *
FROM Tabla t1
WHERE exists
(
SELECT t2.Campo
FROM Tabla t2
where t2.Campo = t1.Campo
GROUP BY t2.Campo
HAVING sign(COUNT (*)-1)= 1);
By: JATHINSON on septiembre 22, 2011
at 18:55
Hola Jathinson. Muchas gracias por tu aportación.
By: alfayate on octubre 20, 2011
at 21:41
puedes intentar con este otro funciona bien y en algunos casos mejora el tiempo de select
SELECT *
FROM Tabla t1
WHERE exists
(
SELECT t2.Campo
FROM Tabla t2
where t2.Campo = t1.Campo
GROUP BY t2.Campo
HAVING COUNT (*) > 1);
By: JATHINSON on septiembre 22, 2011
at 18:32
Buenos dias estor hacindo un select a varia tablas donde hay informacion repetida pero yo solo necesito un registro por persona, la consulta le trae el mismo cliente muchas veces, como elimino en la misma consulta lo registros duplicados, ya probe con distinct pero lo que hace es traerme los repetidos en orden, gracias por su ayuda
select distinct
By: oscar usug on abril 1, 2011
at 14:49
Hola Oscar
Resulta difícil responderte sin información más concreta sobre tu problema. Por lo que comentas parece que lo que necesitas es un group by (una agrupación). En cualquier sitio de Oracle puedes encontrar información básica sobre qué son y cómo se hacen agrupaciones. Prueba a buscar «group by oracle» o «agrupaciones oracle». Espero que te sea de utilidad.
By: alfayate on abril 10, 2011
at 22:23
Gracias viejo!! …me sirvio de mil maravillas el ejemplo!! ;) …DTB! (Y)
By: Juan Carlos on febrero 7, 2011
at 17:07
¡De nada, joven! Para eso estamos; me alegra de que te hay sido útil.
By: alfayate on febrero 12, 2011
at 0:18
Excelente gracias
By: dyniix on septiembre 21, 2010
at 0:45
Hola
Me alegro de que te sea de utilidad.
Un saludo
By: alfayate on septiembre 27, 2010
at 21:26