FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Eliminacion de duplicados
Hola Foreros:
Les planteo lo siguiente(con Base de Datos SQL Server): Form1-Tabla1-DBGrid1-DataSource1 Form2-Tabla2-DBGrid2-DataSource2 Una suposición: Teniendo 3 pasos a), b) y c). a) Ingreso 3 registros en el Form1. 1Registro-XX1 2Registro-XX2 3Registro-XX3 Estos 3 registros los copio al Form2 (Tabla2), luego elimino los registros del Form1. b) Ahora ingreso 4 registros en el Form1. 1Registro-XX4 2Registro-XX3 3Registro-XX5 4Registro-XX6 Estos 4 registros los copio al Form2 (Tabla2), luego elimino los registros del Form1. (...Y asi sucesivamente....) Aqui el detalle: c) Cuando copio los registros, en el Form2 debo realizar una eliminacion de todos aquellos que se hayan duplicados, es decir; se debe eliminar el primer registro encontrado duplicado. Como verán este registro (3Registro-XX3) se repite (2Registro-XX3). Lo que significa que debo eliminar: 3Registro-XX3 Y mantener el registro : 2Registro-XX3 Estas elminaciones se realizan en el Form2 (Tabla 2), que esta relacionado con el DataSource2 el DBGrid donde se vizualizan tooodas las copiadas (Incluyendo las duplicadas) Puedo eliminar del DBGrid, el seleccionado, el primer o el ultimo registro; pero no sé cómo hacer para eliminar el primer duplicado encontrado, ya que el segundo es el que quiero que se mantenga. Graaacias. |
#2
|
||||
|
||||
Hola sizne.
Para eliminar los duplicados en "Tabla2" podés usar: Código:
DELETE FROM Tabla2 a WHERE Campo_ID > (SELECT MIN(Campo_ID) FROM Tabla2 b WHERE b.Campo1 = a.Campo1); Si queres evaluar por más de un campo tendrías que usar en la cláusula WHERE: Código:
WHERE b.Campo1 = a.Campo1 AND b.Campo2 = a.Campo2 AND ...
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 24-04-2010 a las 01:52:34. |
#3
|
|||
|
|||
Hola ecfisa,
Los datos que puse son solo ejemplos, en si no son cantidades.. (MIN...) son palabras (siglas de Materias que vuelven a programarse en otra gestion cuando se aplazan, por eso en la Tabla2, se repetiran, cosa que ahi tengo que hacer una limpieza y eliminar SOLO el primer registro duplicado). Espero me entiendas Gracias!!! |
#4
|
||||
|
||||
Hola sizne.
Si, te entendí bién la primera vez. Usá el primer ejemplo que te puse y eliminará los duplicados. (por supuesto cambiá los nombres de campo que puse por los tuyos...) Saludos. Nota: Borré unos comentarios erroneos en el primer post: "DELETE Campos_Deseados FROM" en su lugar va "DELETE FROM", el error fue por que hice la prueba con SELECT y copie y pegue... perdón.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 24-04-2010 a las 01:57:29. |
#5
|
|||
|
|||
Hola ecfisa, gracias por responder y explicar tan bien .
Con tu ayuda hice el el siguiente codigo Cita:
Cita:
No sé como hacerlo para salga como quiero, solo eliminar los primeros duplicados y que sean reprobados. Saludos! |
#6
|
|||
|
|||
Holas...
Miren estuve haciendo lo siguiente para mi duda... pero me los elimina todos los "reprobados" sin importar que haya o no duplicados Cita:
|
#7
|
||||
|
||||
Hola de nuevo sizne.
Hoy con un poco más de tiempo, revisé a fondo el código anterior, cosa que no hice antes por carecer de él. Y sí, efectivamente no hace lo que deseas. Ahora bién, hice una tabla en interbase con los campos involucrados, y la cargué de la siguiente forma: Código:
IdM CodigoM CalificacionM ----------------------------- 1 A R (abreviando...) 2 A R 3 B R 4 C R 5 B R (mal bicho el profe ...) Código:
IdM CodigoM CalificacionM ----------------------------- 1 A R 3 B R tenemos nuestro problema solucionado. En definitiva la consulta queda así: Código:
SELECT * FROM PRUEBA WHERE IdM NOT IN( SELECT MAX(IdM) FROM PRUEBA GROUP BY CodigoM, CalificacionM) Y por supuesto cambiá 'SELECT * FROM' por 'DELETE FROM', al menos si queres que borre... Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 01-05-2010 a las 06:41:18. |
#8
|
|||
|
|||
Hola ecfisa, gracias eh!!!
Cambie unas cositas en el ejemplo Código:
IdM CodigoM CalificacionM ----------------------------- 1 A Reprob (abreviando...) 2 A Aprob 3 B Reprob 4 C Reprob 5 B Reprob (mal bicho el profe ...) Código:
IdM CodigoM CalificacionM ----------------------------- 2 A Aprob 4 C Reprob 5 B Reprob Lo que hice fue lo siguiente en Delphi, funciona pero quiero reducir el codigo y que sea en menor tiempo la ejecucion....y en una sola tabla el recorrido.
Aqui estoy usando dos tablas, asi recorro uno por uno y comparo con cada registro de la OTRA tabla. Pero si fuese solo en una tabla....ya no puedo usar el FIRST,NEXT para comparar.... Saludos... |
#9
|
||||
|
||||
Hola sizne.
A ver... ¿ Lo que queres es que se eliminen las apariciones de registros duplicados cuya calificacion sea 'Reprobado' ? Si es eso bastaría con modificar el código sql así : Código:
DELETE FROM PRUEBA WHERE IdM NOT IN( SELECT MAX(IdM) FROM PRUEBA GROUP BY CodigoM) AND CalificacionM = 'Reprob'
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Eliminacion duplicados y AS | Cabanyaler | SQL | 2 | 19-04-2010 12:55:22 |
problema de eliminacion | nikotina | SQL | 2 | 28-02-2007 14:34:21 |
Eliminacion de datos | luxus | Conexión con bases de datos | 2 | 28-08-2006 16:05:34 |
Problemas de Eliminación | Palmiro | Conexión con bases de datos | 8 | 03-02-2006 14:45:14 |
procedimiento de eliminacion | kejos | MS SQL Server | 3 | 30-01-2006 16:46:02 |
|