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

SQL Oracle Discussion :

Enlever les doublons


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 4
    Par défaut Enlever les doublons
    Bonjour,

    Je suis confronté a un problème, en apparence simple mais qui me pose beaucoup de soucis (principalement parce que je suis pas très à l'aise avec le SQL également).
    J'ai plusieurs base a "nettoyer", elles ont toute une architecture différentes (autant sur le nombre de variable, que sur leurs type ou leurs taille).
    Pour schématiser le problème, j'ai créer une base de test simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    A   B   C   D   // Quatre variables
     
    A1  B1  C1  D1  // Quatre valeurs
    A1      C1  D1
        B1  C1  D1
            C1  
    A1  B1  C1
    Comme vous pouvez le voir, ma table est composé de ligne complète et quasiment identique mais auquel il manque des champs.
    Je peux pas les garder dans ma base, ces lignes représentent juste une perte d'information.
    J'arrive a traiter le cas où deux lignes sont strictement identique (doublons parfait) et à supprimer toutes ces lignes.

    J'ai naïvement fait un algorithme qui compare chaque variable avec les variables des lignes suivantes mais l'algo est absolument pas évolutif et absolument pas pratique (pour 4 variables, 4*4 IF différents ...)
    Il me faudrait un algo qui puisse se déplacer de variables en variables sans utiliser leurs noms et qui s'arrête quand la ligne ne contient plus de variable à comparer (comme une boucle FOR pour parcourir un tableau) mais j'ai aucunes idées de comment faire ...

    Si vous avez une idée de comment éclairer ma lanterne, je vous remercie d'avance
    ( et si jamais je suis pas très clair dans mes explications, je peux toujours ré expliquer )

  2. #2
    Membre émérite Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Par défaut
    create table temptable as select distinct nvl (var1,'vide'),nvl (var2,'vide'),nvl (var3,'vide'),nvl (var4,'vide') from tatable;

    Tu contrôle tes données.

    Truncate tatable;

    insert into tatable select * from temptable;

    jko

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 4
    Par défaut
    Donc si j'ai bien compris, l'idée est de créer une table contenant tout ce qui est différent de la ligne :
    nvl (var1,'vide'),nvl (var2,'vide'),nvl (var3,'vide'),nvl (var4,'vide')

    Mais ca me reviens davantage a enlever ce qui est différent plus que la perte d'information en soit, il me semble.

    Imaginons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    A   B   C  D   // Quatre VARIABLES
     
         B1 C1 D1  // Quatre valeurs
    A1      C1 D1
         B1 C1 D1
              C1  
         B1 C1
    Il devrait rester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    A   B   C  D   // Quatre VARIABLES
     
         B1 C1 D1  // Quatre valeurs
    A1      C1 D1
    Car tout le reste signifie de la perte d'information et la ligne qui contient A1 ( mais pas B1 )
    doit etre conservé en vu d'une futur fusion.

  4. #4
    Membre émérite Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Par défaut
    Non, seul la ligne 5 disparait.

    jko

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 4
    Par défaut
    Oui, c'est le cadre des doublons parfait (toute les variables contiennent exactement la meme chose qu'un autre champs).
    J'essaye de cibler les doublons en perte d'information ...

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Par défaut
    C'est vous qui connaissez les règles, et à moins de les écrire explicitement ici dans un exemple complet, on ne peut rien faire.
    Ainsi, dans votre exemple précédent, vous gardez:
    De ce que j'ai compris, vous souhaitez à l'étape suivante les fusioner pour obtenir A1 B1 C1 D1
    Mais dans le cas suivant, vous faite quoi?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    A1      C1  D1
        B1  C1  D1
        B2  C1  D1
    Et pourquoi la solution ne serait-elle pas A1 B3 C1 D1?

    Bref, sur quoi vous basez vous pour décider de ce qu'il faut faire ?
    Si vous n'avez pas de règle générale, on ne peut pas vous aider, et la solution manuelle de jkofr fonctionne toujours.


    Pour revenir à votre problème original:
    Vous devriez jeter un oeil du côté des contraintes, UNIQUE ou CHECK afin d'éviter ce problème à l'avenir. Ca va rien résoudre tout de suite, mais ça vous évitera de devoir refaire la même chose dans 6mois.

Discussions similaires

  1. [ArrayList] Enlever les doublons
    Par GLDavid dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 13/05/2012, 02h43
  2. Requête : enlever les doublons
    Par Metallic-84s dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/03/2006, 20h34
  3. Enlever les doublons en fonction de la date
    Par nicko5959 dans le forum Access
    Réponses: 2
    Dernier message: 10/01/2006, 14h13
  4. [SQL] Enlever les doublons par rapport a une colonne
    Par irenee dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/12/2005, 19h23
  5. [array] enlever les doublons
    Par FFF dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 01/11/2005, 10h43

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