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

Langage SQL Discussion :

Suppression doublon dans une table


Sujet :

Langage SQL

  1. #1
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut Suppression doublon dans une table
    Bonjour a tous, je vais essayer d'expliquer de façon simple mon problème:

    Prenons une table avec 3 champs (6 champs en faite, mais 3 seulement nous intéresse ici):

    PK_TABLE : NUMBER (PK de la table)
    NUM1 : NUMBER
    NUM2 : NUMBER

    Cette table contient plusieurs milliers d'enregistrements, dont certain sont des doublons (voir des triplons) avec NUM1 et NUM2 identiques. En théorie, il ne devrait pas y avoir deux enregistrements avec le même [NUM1,NUM2]. L'ideal aurait été au départ de créer une contrainte unique sur ces deux champs, mais le concepteur de cette table ne l'avais pas prévu.

    J'ai effectuer une requête pour tenter de lister le nombre de doublons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select distinct t1.num1, t1.num2
    from MaTable t1, MaTable t2
    where t1.num1 = t2.num1
    and t1.num2= t2.num2
    and t1.pk_table != t2.pk_table
    Cette requête me permet d'avoir une liste des doublons et il y en a environ 8000.


    J'aimerais faire un nettoyage de cette table, mais j'avou ne pas trouver la requete SQL adequat.

    Si l'un d'entre vous avait une idée, je lui en serait reconnaissant!

    Merci d'avance!
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  2. #2
    Scorpi0
    Invité(e)
    Par défaut
    Yup,

    Tu peux utiliser l'astuce que pour un doublon, voir, pour un n-uplet doublon, tu ne veux garder que celui que a la PK la plus petite par exemple.
    Ça donne quelque chose de ce genre là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    delete from MaTable 
    where pk_table in
    (
       SELECT distinct t2.pk_table
       FROM MaTable t1, MaTable t2
       WHERE t1.num1 = t2.num1
       AND t1.num2= t2.num2
       AND t1.pk_table < t2.pk_table
    )

  3. #3
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Cette requête supprimera toutes les lignes qui ont NUM1 = NUM2
    Faudra faire une copie de ta bdd avant de tester nos réponses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    delete from 
    MaTable where NUMBER in
    ( select NUMBER from MaTable
       where NUM1 = NUM2 
    )

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Cours !!!

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  5. #5
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Merci pour vos réponses rapide!

    Malheureusement je suis confronté à un autre problème. Les 3 autres champs de ma table que je pensais sans importance, en faite en ont (de l'importance). Et lorsqu'il y a des doublons, seule un choix "humain" peux choisir de virer l'un plutôt que l'autre.

    Donc il va falloir trouver un esclave qui s'amuse à vider la table de ces doublons en les vérifiant 1 par 1... Mais ça c'est une autre histoire!

    Merci a vous en tout cas...
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

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

Discussions similaires

  1. supprimer les doublons dans une table
    Par mavean dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/06/2019, 13h26
  2. [WD15] suppression de doublons dans une table
    Par Yolak dans le forum WinDev
    Réponses: 4
    Dernier message: 02/05/2010, 20h55
  3. Suppression de doublons dans une table partionnée
    Par ludmillaj dans le forum Oracle
    Réponses: 10
    Dernier message: 27/12/2005, 14h34
  4. Eliminer des Doublon dans une Table
    Par Soulama dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 03/02/2005, 14h27
  5. [access]doublons dans une table en access !
    Par hackerandco dans le forum Bases de données
    Réponses: 6
    Dernier message: 14/06/2004, 14h45

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