Descargar el PDF
Descargar el PDF
Cuando trabajas con Oracle, a menudo pueden aparecer registros duplicados. Puedes eliminar estas filas duplicadas identificándolas y usando su propio RowID (identificador de fila) o la dirección de la fila. Antes de comenzar, debes crear una copia de seguridad de la tabla por si necesitas revisarla después de haber eliminado los registros.
Pasos
-
Identifica los registros duplicados. En este caso, se identificará el caso "Alan" que aparece dos veces en la tabla. Asegúrate de que los registros que vas a intentar eliminar sean realmente duplicados usando la siguiente sentencia SQL.
-
2
-
Identifícalos a través de la columna llamada "Nombres". Por ejemplo, si tuvieras una columna llamada "Nombres", deberás reemplazar "nombre_columna" por "Nombres".
-
4
-
Identifícalos a través de otras columnas. Si vas a intentar identificar los duplicados a través de otra columna diferente, por ejemplo, mirando la edad de Alan en vez de su nombre, ingresa "Edades" en lugar de "nombre_columna" y así sucesivamente.
select nombre_columna , count ( nombre_columna ) from table group by nombre_columna having count ( nombre_columna ) > 1 ;
Anuncio
-
Usa la sentencia SELECT nombre FROM nombres . Después de SQL , que quiere decir "Standard Query Language" (lenguaje estandarizado de consultas), escribe SELECT nombre FROM nombres .
-
2
-
Elimina todas las filas que contienen el nombre duplicado. Después de SQL , escribe la sentencia DELETE FROM nombres WHERE nombre='Alan' . [1] X Fuente de investigación
-
4
-
Ingresa nuevamente la fila, ahora sin el duplicado. Ahora que eliminaste todas las filas que tienen el nombre de ejemplo "Alan", debes insertar nuevamente otra a través de la sentencia INSERT INTO nombres VALUES ('Alan'); . Después de SQL , escribe COMMIT para crear la nueva columna.
-
6
-
Observa la nueva lista. Una vez que hayas completado los pasos anteriores, puedes revisar la tabla para asegurarte de que no queden registros duplicados a través de la sentencia SELECT * FROM nombres .
SQL > select nombre from nombres ; NOMBRE
Alan Carrie Tom Alan rows selected . SQL > delete from nombres where nombre = 'Alan' ; rows deleted . SQL > commit ; Commit complete . SQL > insert into nombres values ( 'Alan' ); row created . SQL > commit ; Commit complete . SQL > select * from nombres ; NOMBRE
Alan Carrie Tom rows selected .Anuncio
-
Selecciona el RowID que quieras eliminar. Después de SQL , escribe SELECT ROWID, nombre FROM nombres; .
-
Elimina los registros duplicados. Después de SQL , escribe DELETE FROM nombres a WHERE ROWID > (SELECT MIN(ROWID) FROM nombres b WHERE b.nombre=a.nombre); para eliminar los registros duplicados. [2] X Fuente de investigación
-
3
-
Revisa si hay duplicados. Después de haber completado los pasos anteriores, revisa si todavía hay registros duplicados escribiendo SELECT ROWID,nombre FROM nombres; y luego COMMIT .
SQL > select rowid , nombre from nombres ; ROWID NOMBRE ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAB Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom AABJnsAAGAAAdfOAAF Alan rows selected . SQL > delete from nombres a where rowid > ( select min ( rowid ) from nombres b where b . nombre = a . nombre ); rows deleted . SQL > select rowid , nombre from nombres ; ROWID NOMBRE ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom rows selected . SQL > commit ; Commit complete .
Anuncio
-
Selecciona las filas. Después de SQL , escribe SELECT * FROM nombres; para ver las filas.
-
Elimina las filas duplicadas identificándolas a través de sus columnas. Después de SQL , escribe DELETE FROM nombres a WHERE ROWID > (SELECT MIN(ROWID) FROM nombres b WHERE b.nombre=a.nombre AND b.edad=a.edad); para eliminar los registros duplicados. [3] X Fuente de investigación
-
3Revisa si hay duplicados. Después de haber completado los pasos anteriores, revisa si todavía hay registros duplicados escribiendo SELECT ROWID,nombre FROM nombres; y luego COMMIT para comprobar que se hayan eliminado exitosamente los registros duplicados.
SQL > select * from nombres ; NOMBRE EDAD ------------------------------ ---------- Alan 50 Carrie 51 Tom 52 Alan 50 rows selected . SQL > delete from nombres a where rowid > ( select min ( rowid ) from nombres b where b . nombre = a . nombre and b . age = a . age ); row deleted . SQL > select * from nombres ; NOMBRE EDAD ------------------------------ ---------- Alan 50 Carrie 51 Tom 52 rows selected . SQL > commit ; Commit complete .
Anuncio
Advertencias
- Crea una copia de seguridad de tu tabla en tu sesión y úsala para ver cuáles eran los datos de la tabla original antes de eliminar los duplicados (si tienes alguna duda).
SQL > create table alan . names_backup as select * from nombres ; Table created .
Anuncio
Referencias
Anuncio