Consulta SQl , Eliminar registros repetidos pero conservar algunos campos

  • 2 Respuestas
  • 1271 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado brayan_zk

  • *
  • Underc0der
  • Mensajes: 1
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
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



« Última modificación: Enero 29, 2019, 07:05:16 am por HATI »

Desconectado karurosu

  • *
  • Underc0der
  • Mensajes: 179
  • Actividad:
    0%
  • Reputación 1
    • Ver Perfil
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!

Desconectado Dragora

  • *
  • Moderador Global
  • Mensajes: 1516
  • Actividad:
    100%
  • Country: gt
  • Reputación 17
  • La resistencia es inútil, serás absorbido.
    • Ver Perfil
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.