IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

suppression des doublons


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 24
    Points : 20
    Points
    20
    Par défaut suppression des doublons
    Bonjour,
    Je rencontre un probleme pour supprimer des boublons dans une table.
    Il faut que je conserve 1 enregistrement tout en supprimant les doublons.
    Merci de votre aide

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Pensez au bouton

  3. #3
    Membre habitué Avatar de Orionmel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2004
    Messages : 174
    Points : 185
    Points
    185
    Par défaut
    En sql je ne vois pas comment tu pourrais faire par contre tu peut toujours faire un script en php?

    Tu peux récupérer tout tes enregistrements triès par la colonne marquant le doublon et tu parcoures ta liste en supprimant les doublons dans la base.

    Je ne vois que cette solution

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Maximilian m'a un peu coupé l'herbe sous le pied.

    1) Tu créés une table temporaire avec la même structure que ta table original

    2) Tu fais un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO matable_tmp
    (SELECT *
    FROM matable
    GROUP BY champ1, champ2, ...)
    Avec dans le GROUP BY tous les champs qui ne sont pas des clefs primaires SAUF si la clef primaire est composée de plusieurs champs (c'est le cas pour les associations), auquel cas tu fais le GROUP BY sur tous les champs.

    3) Tu supprimes ta table originale (ici matable)

    4) Tu renommes ta table temporaire avec le nom de ta table originale (matable_tmp => matable)
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  5. #5
    Membre habitué Avatar de dor_boucle
    Inscrit en
    Juin 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 147
    Points : 136
    Points
    136
    Par défaut
    cela ne marche pas pour moi...
    j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    INSERT INTO t_devis_tmp( 
    SELECT * 
    FROM t_devis
    GROUP BY devis_id_get
    HAVING COUNT( * ) >= 1 ) 
     
    MySQL a répondu:
     
     
    You have an error in your SQL syntax near 'SELECT  * 
    FROM t_devis
    GROUP  BY devis_id_get
    HAVING COUNT(  *  )  >= 1  ) ' at line 2
    Retour
    J'ai l'impression d'engager un combat sans précédent avec la nature. Je vais bien, le moral est bon, je poursuis le vol. (Youri Gagarine)

  6. #6
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    C'est peut-être à cause des parenthèses: MySQL croit que c'est des noms de colonnes (désolé!)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO matable_tmp
    SELECT *
    FROM matable
    GROUP BY champ1, champ2, ...
    ou:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO matable_tmp (champ1, champ2, ...)
    SELECT *
    FROM matable
    GROUP BY champ1, champ2, ...
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  7. #7
    Membre habitué Avatar de Orionmel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2004
    Messages : 174
    Points : 185
    Points
    185
    Par défaut
    Ah oui forcément si on utilise des tables temporaires tout devient plus simple. J'ai éssayé une bonne heure de le faire par requête sans succés. Je voulais pas faire de table temporaire

  8. #8
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Dans un autre sujet (celui-là: http://www.developpez.net/forums/viewtopic.php?t=380149), il y a un problème lié à la taille de la base, donc tu ne peux pas te permettre de dupliquer des enregistrements dans une table temporaire (ici ça ne semble pas le cas)

    Si l'auteur de l'autre sujet me répond, alors j'explorerai une solution "sur place" pour supprimer les doublons sans utiliser de table temporaire (en utilisant un script), mais par contre ce sera plus lent.

    C'est un problème récurrent en informatique:
    - aller plus vite, mais en utilisant plus de mémoire
    - réduire la taille en mémoire mais en augmentant les temps de calculs

    Après, tout dépend du problème à résoudre.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    La méthode la plus simple pour supprimer des doublons est de créer un index composite unique, sur les colonnes dont tu veux éviter les doublons.

    Exemple: dans ta_table tu veux supprimer toutes les lignes qui présentent les même valeurs pour les colonnes 1, 3 et 5.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #création de l'index unique (IGNORE, pour ignorer les erreurs, est indispensable)
    ALTER IGNORE TABLE ta_table  ADD UNIQUE ton_index (col1, col3, col5)
     
    # supression de l'index si superflu
    ALTER TABLE ta_table DROP INDEX ton_index
    Pas besoin de table temporaire. Mysql fait le travail tout seul mais attention, pas de retour en arrière possible! Songe à faire une copie avant.
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  10. #10
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Oui mais cela ne tient pas compte de l'utilisation éventuel de ce doublon dans une autre table.

    Donc c'est très dangereux
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/07/2009, 11h06
  2. [debutant] suppression des doublons absolus
    Par Auteur dans le forum Langage SQL
    Réponses: 9
    Dernier message: 19/10/2007, 10h26
  3. suppression des doublons
    Par sucreMan dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 03/10/2007, 13h12
  4. [SQL] Suppression des doublons d'un champs SQL
    Par fabien14 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/05/2007, 15h28
  5. problème avec la suppression des doublons dans arraylsit
    Par ulysse031 dans le forum Langage
    Réponses: 13
    Dernier message: 04/03/2007, 13h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo