Buscar registros duplicados en ORACLE.

Pues eso amig@s,

Para buscar registros duplicados en una tabla de oracle, con la siguiente consulta podremos saber cuantos registros hay duplicados por cada columna:

SELECT COL_A_COMPROBAR, COUNT(COL_A_COMPROBAR)
FROM NOMBRE_TABLA
GROUP BY COL_A_COMPROBAR
HAVING COUNT(COL_A_COMPROBAR) > 1

Tambien pueden añadir campos a la consulta para identificar mas los datos de las lineas duplicadas, solo basta con agregar las columnas separadas con una coma en el SELECT y luego respetar el orden en el group by (COL2, COL3, COL4):

SELECT COL_A_COMPROBAR, COUNT(COL_A_COMPROBAR), COL2, COL3, COL4
FROM NOMBRE_TABLA
GROUP BY COL_A_COMPROBAR,COL2, COL3, COL4
HAVING COUNT(COL_A_COMPROBAR) > 1

Añadido el 28/3/2012:

En caso de que tengamos espacios en blanco, las anteriores consultas no muestran resultados por que el valor a comprobar de la columna COL_A_COMPROBAR en el having es distinto por lo que lo considera otro registro y no encuentra la duplicidad. Para encontrar registris duplicados con espacios podemos utilizar el comando LTRIM o RTRIM segun de que lado estén los espacios (izquierda o derecha).

Espacios a la izquierda:

SELECT Ltrim (COL_A_COMPROBAR), COUNT(COL_A_COMPROBAR)


FROM NOMBRE_TABLA

GROUP BY Ltrim (COL_A_COMPROBAR)

HAVING COUNT (Ltrim (COL_A_COMPROBAR)) > 1
 
Espacios a la derecha:


SELECT Rtrim (COL_A_COMPROBAR), COUNT(COL_A_COMPROBAR)
FROM NOMBRE_TABLA
GROUP BY Rtrim (COL_A_COMPROBAR)
HAVING COUNT (Rtrim (COL_A_COMPROBAR)) > 1

Otra opción buscando por ROWID

Select count(*) From Mitabla
      Where Rowid In
                    (Select Rowid
                       From (Select Rowid,
                                    ROW_NUMBER() Over (
                                            Partition By fecha || matricula
                                            Order By fecha || matricula
                                        ) nbLines
                               From Mitabla) t2
                      Where nbLines > 1);

Esta query devolverá todos aquellos registros que están duplicados por fecha y matricula (siempre y cuando estos sean valores comunes).

Espero que les resulte util.

Salu2.

Share on Google Plus
    Blogger Comment

5 comentarios:

JHONNY AGUIRRE dijo...

Super útil estas sentencias.. Gracias por compartirlo.!!

Anónimo dijo...

Muchas gracias, me fue muy útil tu aporte.

Unknown dijo...


I have read some just right stuff here. Certainly price bookmarking for revisiting. I wonder how so much attempt you place to create such a excellent informative web site. gmail log in

DotDark dijo...

Excelente!!
Muchas gracias por compartir.

Unknown dijo...


Greetings from Ohio! I'm bored to tears at work so I decided to browse your blog on my iphone during lunch break. I love the info you provide here and can't wait to take a look when I get home. I'm surprised at how fast your blog loaded on my mobile .. I'm not even using WIFI, just 3G .. Anyhow, awesome site! facebook sign in