Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: brayan_zk en Enero 29, 2019, 03:14:31 AM

Título: Consulta SQl , Eliminar registros repetidos pero conservar algunos campos
Publicado por: brayan_zk en Enero 29, 2019, 03:14:31 AM
Buenas !!

Estoy realizando una migración de una tabla llamada "personas" con los siguientes campos: idpersona, documento, nombres, apellidos , direccion, edad.  El idpersona es Auto incrementable.
Debo eliminar las personas que esten mas de una vez , lo hago con esta sentencia.
   
      DELETE p1 FROM personas2012 p1
      INNER JOIN  personas2012 p2
      WHERE  p1.codpersona > p2.codpersona
      AND p1.nombres=p2.nombres
      AND p1.apellidos= p2.apellidos 

Pero hay personas repetidas pero en el campo documento, se pueden encontrar numeros que representan el documento verdadero,   o si esta persona tenia ese campo vacion se asigna este patron X100,  Ejemplo :

Juan Vargas  232478
pablo Estepa  121212
Juan Vargas  x100

Debo conservar a Juan Vargas  232478 en la tabla , me podrian ayudar por favor, no si es posible hacerlo



Título: Re:Consulta SQl , Eliminar registros repetidos pero conservar algunos campos
Publicado por: karurosu en Enero 30, 2019, 07:25:44 PM
Por lo que te entendí quieres conservar solo un campo de la tabla y borrar los demás, ¿porqué no creas una tabla donde pases esos datos con la condición de que no sea el valor x100 y después ya borras la tabla anterior por completo?

¡Saludos!
Título: Re:Consulta SQl , Eliminar registros repetidos pero conservar algunos campos
Publicado por: Dragora en Febrero 01, 2019, 01:08:21 PM
te dejo ejemplo de estos dos casos. El primero, necesitas saber tus clientes reales, sin tener los repetidos, y los segundo, eliminar a tus clientes repetidos.

Pues bien, lo primero que te sugiero es crear una especie de tabla temporal, que tenga las mismas características de tu tabla de clientes. Luego mandes a esta tabla todos los usuarios agrupados.

En SQL Server seria así:

INSERT INTO tablaTemporal
select Campo1, Campo2, Campo3, .... (Todos los campos)
from Clientes
group by Campo1, Campo2, Campo3, .... (Todos los campos)

Ya con esto tendrías tu tabla temporal con la información actualizada. Si quieres, puedes eliminar los datos de la primer tabla, y luego cargar dicha tabla con los datos de la tabla temporal, simplemente invirtiendo la consulta, algo así:

TRUNCATE TABLE Clientes

INSERT INTO Clientes
select Campo1, Campo2, Campo3, .... (Todos los campos)
from tablaTemporal
group by Campo1, Campo2, Campo3, .... (Todos los campos)


Espero te siva, saludos.