Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 15984|Respuesta: 0

[Fuente] MySQL [eliminar redundancia y dejar uno] Una sentencia sql completa el resumen de la idea

[Copiar enlace]
Publicado en 13/3/2019 13:37:42 | | | |
Hace unos días, cuando estaba haciendo un requisito, necesitaba limpiar los registros duplicados en mysql, y la idea en ese momento era escribirlo mediante recorrido de código, y entonces pensé que era demasiado complicado, pensando que debería poder resolver el problema con una instrucción sql. Después de revisar la información y consultar con el jefe, se me ocurrió una declaración SQL muy conveniente, y aquí compartiré esta declaración e ideas.

Análisis de necesidades
Si hay registros duplicados en la base de datos, elimina y conserva uno de ellos (ya sea que el criterio para determinar campos duplicados sea múltiple)


solución

Cuando te encuentres con esta necesidad, probablemente tengas una idea en el corazón. Lo más rápido que se me ocurrió fue que podría resolverlo con una instrucción SQL, pero era demasiado superficial con sentencias SQL complejas, así que quería pedir ayuda al jefe.

Busca a alguien que te ayude

因为这个需求有点着急,所以最开始想到的是,可以找这方面的同行来解决,然后分享这个问题给@赵七七同学,结果这货随便百度了一下,就甩给我一个从未用过的sql语句,让我自己尝试,心里万匹那啥啥啥奔腾而过...

Own Baidu

Encontré una sentencia SQL:


Esta idea de SQL es obvia, hay los siguientes 3 pasos:

  • SELECT peopleId, seq FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Consulta registros duplicados en la tabla como condición
  • SELECT min(rowid) FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 La segunda condición es el valor más pequeño del ID en los registros duplicados de la tabla de consultas
  • Finalmente, según las dos condiciones anteriores, se eliminan los registros duplicados restantes excepto el ID más pequeño en el registro duplicado


Pero, desafortunadamente, hay un error al ejecutar esta sentencia, lo que significa aproximadamente que la tabla no puede actualizarse al mismo tiempo que la consulta.


Código resuelto

Basándome en la afirmación SQL anterior, creo que podrías lograr el mismo objetivo en dos pasos a través del código:

  • Los conjuntos de datos duplicados se eliminan primero
  • En función del conjunto de datos consultado, los duplicados restantes se eliminan en un bucle


Tuve una idea y la escribí rápido, pero me sorprendió cuando la presenté, y realmente la necesitaba116sizquierda y derecha, y luego quiero encontrar una instrucción SQL que pueda usar, pegar el código y el resultado en ejecución:




SQL perfecto [deduplicación y dejar uno]

Por fin, obtuve una respuesta perfecta en un grupo técnico, mira esta afirmación SQL:


La afirmación SQL anterior, si miras detenidamente, no es difícil entender la idea, y probablemente esté dividida en 3 pasos para entenderla:

  • (SELECCIONAR min(id) id, user_id, monetario, consume_time DE consum_record GRUPO POR user_id, monetario consume_time TENIENDO conteo(*) > 1) t2 Consulta los registros duplicados para formar una colección (tabla temporal t2), que contiene el ID mínimo de cada registro duplicado
  • consum_record.user_id = t2.user_id y consum_record.monetary = t2.monetary y consum_record.consume_time = t2.consume_time campos asociados para los criterios duplicados
  • Eliminar registros con IDs mayores que IDs en T2 según las condiciones


Cuando vi esta frase, pensé para mí mismo que era demasiado poderoso. Una sentencia sql tan simple puede resolver un problema tan complejo, y la postura es ascendente~
Además, es súper rápido de ejecutar, la ejecución del bucle original de código tarda unos 116 segundos, pero aquí 0,3 segundos son suficientes, increíble~







Anterior:Material en vídeo de javaEE octubre de 2018
Próximo:SQL modifica aleatoriamente los datos actualizados
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com