Maison  >  Questions et réponses  >  le corps du texte

Supprimez les enregistrements MySQL en double et n'en conservez qu'un seul

<p>Comment supprimer les enregistrements MySQL en double (mais n'en conserver qu'un seul)</p> <p>Bonjour à tous, j'ai un problème, j'ai plusieurs enregistrements avec le même identifiant et je souhaite supprimer les enregistrements en double mais n'en garder qu'un. Des idées sur l'utilisation des instructions MySQL ? </p> <p>J'ai cette instruction pour voir le nombre d'enregistrements et de doublons, mais cela ne fonctionne pas pour moi lorsque j'utilise l'instruction delete : </p> <pre class="brush:php;toolbar:false;">SELECT e-mail, COUNT(e-mail) DEPUIS Contacts GROUPER PAR email AVOIR COUNT(e-mail) > 1;</pre> <p>J'utilise cette instruction, mais elle ne supprime qu'un seul enregistrement en double : </p> <pre class="brush:php;toolbar:false;">DELETE FROM wp_options WHERE option_id=5 limite 1;</pre> <p>Existe-t-il un moyen de traiter par lots ? </p> <p>Mise à jour : j'utilise cette instruction, mais elle supprime tous les enregistrements en double sans en conserver un : </p> <pre class="brush:php;toolbar:false;">DELETE FROM xhi_options OÙ option_id IN (SELECT option_id FROM (SELECT option_id DE xhi_options GROUPE PAR option_id AVOIR COUNT(option_id) > 1) AS T)</pre></p>
P粉916760429P粉916760429445 Il y a quelques jours498

répondre à tous(2)je répondrai

  • P粉776412597

    P粉7764125972023-08-26 00:32:58

    Dans votre instruction de suppression, vous avez utilisé l'option limit 1, ce qui signifie que vous ne supprimerez qu'un seul enregistrement.

    Essayez de corriger votre code comme ceci :

    DELETE FROM wp_options WHERE option_id=5 limit (dupl_rec_count - 1);

    répondre
    0
  • P粉621033928

    P粉6210339282023-08-26 00:15:25

    Vous pouvez utiliser cette méthode pour conserver les lignes avec la valeur d'identifiant la plus basse

    DELETE e1 FROM contacts e1, contacts e2 WHERE e1.id > e2.id AND e1.email = e2.email;

    Ceci est un exemple de lien Lien 1

    Ou vous pouvez changer >更改为< pour conserver l'identifiant le plus élevé

    DELETE e1 FROM contacts e1, contacts e2 WHERE e1.id < e2.id AND e1.email = e2.email;

    Ceci est un exemple de lien Lien 2

    répondre
    0
  • Annulerrépondre