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

 MySQL Discussion :

doublons sur plusieurs colonnes


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 488
    Par défaut doublons sur plusieurs colonnes
    Bonjour,

    J'ai une table sql avec plusieurs champs. J'aimerai tester si des doublons existent sur deux de ces colonnes dans ma table pour pouvoir les supprimer.

    Comment faire?

    Merci d'avance!

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour,

    tu peux faire ceci :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * FROM taTable 
    GROUP BY champ1, champ2
    HAVING COUNT(*) > 1

  3. #3
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Tu fais deux SELECT sur la même table chacun sur une des deux colonnes que tu renommes (AS) de manière identique dans les deux SELECT.
    Tu mets ces SELECTs en UNION ALL tu comptes dans un GROUP BY et tu ne retiens avec une clause HAVING que les items dont le comptage est supérieur à 1.
    Tu vas comme cela détecté les doublons (voire triplets ou plus) aussi bien entre les deux colonnes que dans chacune des colonnes.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Plutôt marrant, nous avons eu deux interprétations de ton exposé de problème qui débouchent, chacune, sur une solution adaptée.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 488
    Par défaut
    Voilà ce que j'ai fait:

    J'ai crée une nouvelle colonne dans laquelle j'ai concaténé mes 2 champs.
    J'utilise donc cette colonne pour trouver les doublons:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT doublon 
    FROM cv 
    WHERE `upddt` >= '2010-11-19' 
    and upddt <= '2010-11-23'  
    GROUP BY doublon 
    HAVING COUNT(doublon) > 1 
    ORDER BY `upddt`  DESC
    Maintenant comment faire pour les supprimer?

  6. #6
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    un delete avec id IN(...) ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 488
    Par défaut
    Voilà ce que je fais mais j'ai une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Delete From cv c1 where c1.doublon in (SELECT c2.doublon 
    FROM cv c2
    WHERE c2.`upddt` >= '2010-11-19' 
    and c2.upddt <= '2010-11-23 10:27:01'  
    GROUP BY c2.doublon 
    HAVING COUNT(c2.doublon) > 1 
    ORDER BY `c2`.`upddt`  DESC)
    Erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'c1 where c1.doublon in (SELECT c2.doublon FROM cv c2 WHERE c2.`upddt` >= '201' at line 1

  8. #8
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    de mémoire je crois que la syntaxe avec des alias est celle ci :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DELETE alias FROM table AS alias WHERE...

    Sinon attention à ton order, il s'effectuera APRES ton group by donc si tu souhaites récupérer toutes les dates décroissantes, c'est raté. J'ai l'habitude de faire même s'il y a surement mieux quelque chose du style :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT C1, C2 FROM (
       SELECT C1, C2 FROM table
       ORDER BY C2 DESC
       )
    GROUP BY C2

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Recherche doublons sur plusieurs colonnes
    Par David_18 dans le forum Access
    Réponses: 11
    Dernier message: 19/05/2014, 19h15
  2. Filtrer les doublons sur plusieurs colonnes
    Par henri228 dans le forum Conception
    Réponses: 2
    Dernier message: 07/05/2010, 22h21
  3. Jointure avec conditions sur plusieurs colonnes
    Par ben53 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 28/11/2005, 09h27
  4. Lister sur plusieurs colonnes dans état
    Par armagued dans le forum Access
    Réponses: 3
    Dernier message: 30/10/2005, 21h21
  5. Query sur plusieurs colonnes avec count(distinct...)
    Par Jeankiki dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/08/2004, 15h22

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