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

Oracle Discussion :

Suppression de doublons dans une table partionnée


Sujet :

Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Suppression de doublons dans une table partionnée
    Bonjour,

    Je travaille actuellement sous Oracle 9i sur une table assez volumineuse (44 853 505 lignes au total) et partionnée

    PARTITION COUNT(*)
    ------------- -------------
    PART 1 1678900
    PART 2 1421551
    PART 3 9928352
    PART 4 14674118
    PART 5 3587236
    PART 6 2834215
    PART 7 5737713
    PART 8 3959282
    PART 9 642461
    PART 10 389677
    Dans cette table, je dois supprimer des doublons, j'utilise une requête du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DELETE 
    FROM "SCHEMA"."TABLE" T1 
    WHERE DATE < (SELECT MAX(DATE) FROM "SCHEMA"."TABLE" T2 
    WHERE T1.PARTITION = T2.PARTITION 
    AND T1.CHAMP1_PK = T2.CHAMP1_PK 
    AND T1.CHAMP2_PK = T2.CHAMP2_PK);
    J'aimerais travailler indépendament sur chacune des partitions mais je ne sais pas comment faire.

    Quelqu'un aurait-il une idée, un conseil ?

    Merci beaucoup par avance pour votre aide.
    Cordialement.
    ludmillaj

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Bonjour,

    Pourquoi ne pas simplement ajouter une clause WHERE filtrant la partition en question ?

    PS : merci de penser aux balises QUOTE et CODE à l'avenir

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    En effet, je viens de voir cette option.
    J'explore aussi les curseurs car le but est de programmer un traitement.

    Merci.
    ludmillaj

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    attention, dans ta requête, tu ne supprime pas les doublons, tu enleves tout les éléments. Je te consille de passer par une table intermédiaire.

    Voici une solution qui ne tient pas compte des partitions mais qui devrait marcher. a toi de l'adapter si tu veux, mais je ne suis pas sûre qu'utilser les partitions te fera gagner du temps.

    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
     
    create table temptable as 
    select T1.CHAMP1_PK,T1.CHAMP2_PK, count(*)
    from matable
    group by T1.CHAMP1_PK,T1.CHAMP2_PK
    having count(*)>1;
     
    create table temp2table t2 as 
    select * from matable  T1
    where T1. CHAMP1_PK=t2. CHAMP1_PK
    and T1. CHAMP2_PK=t2. CHAMP2_PK;
     
    delete  from matable where  CHAMP1_PK,CHAMP2_PK in select   CHAMP1_PK,CHAMP2_PK from temptable;
     
    insert into matable select * from tmp2table

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    non, il ne garde bien que les MAX il me semble

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Bonjour Fred!


    Je ne suis pas d'accord avec toi. Le max est trompeur dans ce cas.
    J'ai plusieurs critiques à faire à la requête que propose ludmillaj.
    Tout d'abord, si on veux éliminer des doublons, je ne pense pas que ce genre de code soit bon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DELETE
    FROM "SCHEMA"."TABLE" T1
    WHERE DATE <....

    Une requête d'égalité devrait amplement suffire ou bien on cours à la catastrophe!

    ensuite dans le cas de vrai doublons, puisqu'il n'existe aucun moyen logique de les différencier, si on en efface un, on efface l'autre!

    Donc il existe deux types de solutions:

    - Les différencier avec le ROWID (dans ce cas bien penser au cas ou il y a plus de deux enregistrements)
    - Inserer l'union des doublons dans une table temporaire, deleter les doublons puis réinsérer la table temporaire.

    Mais peux être y a t'il quelque chose qui m'échape

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    en effet, ici ça répond à un besoin fonctionnel spécifique

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    lequel?
    Je ne comprends pas ce que tu veux dire????

  9. #9
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    dans son cas, la colonne DATE permet d'identifier de manière unique les enregistrements à garder. C'est pas toujours aussi simple de dédoublonner

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    alors si on peux différencier avec la colonne date, ce n'est pas un vrai doublon!

    Et du coup c'est beaucoup plus facile et on peux tout faire avec une seule requête!

  11. #11
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    Je viens de m'apercevoir que ma requête fait débat.

    En fait le but est de dédoublonner sur 4 éléments (sur 6 au départ) de la PK et de ne garder que les éléments nouvellement insérés = soit en ne gardant que les enregistrements dont la date de mise à jour est la plus grande.

    cordialement.
    ludmillaj

+ 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 doublon dans une table
    Par sat83 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/09/2008, 11h37
  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