Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 15984|Resposta: 0

[Fonte] MySQL [remover redundância e deixar uma] Uma instrução sql completa o resumo da ideia

[Copiar link]
Publicado em 13/03/2019 13:37:42 | | | |
Alguns dias atrás, quando eu estava fazendo um requisito, precisei limpar os registros duplicados no mysql, e a ideia na época era escrever através de code traversal, e então achei complicado demais, achando que deveria conseguir resolver o problema com uma instrução sql. Depois de checar as informações e consultar o chefe, criei uma declaração SQL muito conveniente, e aqui vou compartilhar essa declaração e ideias SQL.

Análise de necessidades
Se houver registros duplicados no banco de dados, exclua e mantenha um deles (seja o critério para determinar campos duplicados de múltiplos campos)


solução

Quando você encontra essa necessidade, provavelmente tem uma ideia no coração. A coisa mais rápida que pensei foi que eu poderia resolver com uma instrução SQL, mas eu era muito superficial em instruções SQL complexas, então quis pedir ajuda ao chefe.

Encontre alguém para ajudar

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

Own Baidu

Encontrei uma instrução SQL:


Essa ideia do SQL é óbvia, existem os seguintes 3 passos:

  • SELECT peopleId, seq FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Consultar registros duplicados na tabela como condição
  • SELECT min(rowid) FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 A segunda condição é o menor valor do ID nos registros duplicados na tabela de consulta
  • Por fim, de acordo com as duas condições acima, exclua os registros duplicados restantes, exceto o menor ID no registro duplicado


Mas, infelizmente, há um erro ao executar essa instrução, o que significa aproximadamente que a tabela não pode ser atualizada ao mesmo tempo que a consulta.


Código resolvido

Com base na declaração SQL acima, acho que você pode conseguir alcançar o mesmo objetivo em dois passos através do código:

  • Conjuntos de dados duplicados são retirados primeiro
  • Com base no conjunto de dados consultado, as duplicatas restantes são removidas em um loop


Tive uma ideia, e escrevi rápido, mas fiquei chocado quando a executei, e realmente precisava dela116sesquerda e direita, e então quero encontrar uma instrução SQL que eu possa usar, colar o código e o resultado em execução:




SQL perfeito [deduplicação e deixe um]

Finalmente, recebi uma resposta perfeita em um grupo técnico, veja esta declaração SQL:


A afirmação SQL acima, se você olhar de perto, não é difícil entender a ideia, e provavelmente está dividida em 3 etapas para entender:

  • (SELECIONE min(id) id, user_id, monetário, consume_time DE consum_record GRUPO POR user_id, monetário consume_time TENDO contagem(*) > 1) t2 Consulte os registros duplicados para formar uma coleção (tabela temporária t2), que contém o ID mínimo de cada registro duplicado
  • consum_record.user_id = t2.user_id e consum_record.monetary = t2.monetary e consum_record.consume_time = t2.consume_time campos Associate para os critérios duplicados
  • Exclua registros com IDs maiores que IDs em T2 de acordo com as condições


Quando vi essa frase, pensei comigo mesmo que aquilo era poderoso demais. Uma declaração SQL tão simples pode resolver um problema tão complexo, e a postura está subindo~
Também é super rápido de rodar, a execução do loop original leva cerca de 116s, mas aqui 0,3s é suficiente, incrível~







Anterior:javaEE material em vídeo de outubro de 2018
Próximo:SQL modifica aleatoriamente os dados atualizados
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com