Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Eliminar info duplicada/tripicada en algunos campos (https://www.clubdelphi.com/foros/showthread.php?t=33713)

marceloalegre 14-07-2006 17:45:56

Eliminar info duplicada/tripicada en algunos campos
 
Buenos dias Amigos, les molesto por la siguiente cuestion:
esta es la situacion:
Código:

ID_NRO ID_TABLA ID_NRO2 DATO
  10        20        72      1
  11        20        72      2
  12        20        72      3
  13        22        73      3
  14        20        72      1  --- ELIMINAR ES MISMA TABLA Y MISMO DATO
  15        20        72      2  --- ELIMINAR ES MISMA TABLA Y MISMO DATO
  16        20        72      3  --- ELIMINAR ES MISMA TABLA Y MISMO DATO
  17        20        72      1  --- ELIMINAR ES MISMA TABLA Y MISMO DATO

o sea donde tengo que eliminar los datos que este duplicados en DATO y id_tabla dejando solamente uno de los registros de cada uno, el menor nro de id...

me pueden ayudar a realizar la consulta puesto que siempre estoy muy "quedado" para cuestiones de sql?

Muchas gracias!

ContraVeneno 14-07-2006 19:31:41

Tal vez esta página te pueda dar una idea de lo que necesitas.

marceloalegre 14-07-2006 19:59:27

Lamentablemente, y segun veo, eso solo funciona para sql server, yo estoy usando interbase, y por ejemplo si en un stores quiero poner esta sentencia
Código SQL [-]
SELECT col1, col2, col3=count(*)
INTO holdkey
FROM t1
GROUP BY col1, col2
HAVING count(*) > 1

col3=count(*) esto genera un token unknown .
Ademas de esto veo que utiliza una tabla contenedora, de una manera simple cuando hace el into holdkey,,, me parece que esto tampoco estaria funcionando en interbase...
Bueno MIL GRACIAS igualmente! por la ayuda, seguire buscando la query "salvadora" :)!

basti 15-07-2006 00:26:32

Creo que se puede hacer en una sóla sentencia

Código SQL [-]
DELETE FROM TABLA AS T 
    WHERE  (SELECT COUNT(ID_NRO) FROM TABLA 
                WHERE  ID_TABLA = T.ID_TABLA AND ID_NRO2 = T.ID_NRO2 AND
                DATO = T.DATO GROUP BY ID_TABLA, ID_NRO2, DATO) > 1 
    AND  ID_NRO <> (SELECT MIN(ID_NRO) FROM TABLA 
                            WHERE ID_TABLA = T.ID_TABLA AND 
                            ID_NRO2 = T.ID_NRO2 AND DATO = T.DATO)

algo así, no sé si habrá algún error de sintaxis

ContraVeneno 15-07-2006 00:29:32

Pues primero habría que hacer unas pruebas, no vaya siendo que te borres toda la tabla de ventas de un solo jalón, jejeje :D

marceloalegre 18-07-2006 16:22:48

Muchas gracias Basti! la query esta muy buena y simple ya que calculas duplicados y despues de esos dejar el menor id . Funcionó excelentemente!


La franja horaria es GMT +2. Ahora son las 13:07:17.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi