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 :

Dédoublonnage table fonctionnant à demi


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 29
    Par défaut Dédoublonnage table fonctionnant à demi
    Bonjour à tous,

    je cherche à dédoublonner une table sous Oracle 10g, sans PL SQL.

    La requête que je pensais utiliser, récupéré sur le net est la suivante :

    update pr0 pa
    set template = '2', DMOD = sysdate
    where rowid > (
    select min(rowid)
    from pr0 pb
    where (pb.var3 = pa.var3)
    );

    var3 est bien entendu censé être unique, et ne l'est donc pas à cause des
    doublons.
    Je ne dois laisser plus qu'une seule occurence de var3 dans la table pr0.

    le set template = '2', DMOD = sysdate est spécifique à l'outil pour
    signifier les lignes à supprimer.

    Malheureusement cette requête supprime trop de doublons, tout en laissant
    parfois la bonne ligne.


    Si quelqu'un peut m'aider, cela est assez urgent, désolé.


    Merci.

    Fabien.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Par défaut
    Ce n'est pas un delete que tu devrais faire à la place d'un update? Ce que tu veux faire c'est bien supprimer des lignes?

  3. #3
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 29
    Par défaut
    Mon update change des valeurs de champs, et le logiciel fera le delete tout seul.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Par défaut
    Et il supprime donc les endroits ou tu as fait la modif?

    Est ce normal que tu n'aies aucune jointure pour la table prO?
    Dans quelle table sont les champs mis à jour? prO ou pa?
    Que fait prO dans la sous requête?

  5. #5
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 29
    Par défaut
    Ma jointure est ici : (pb.var3 = pa.var3)

    var3 étant unique, pa et pb 2 alias pour pr0

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Par défaut
    oups endormie... oublie ce que j'ai dit...
    mais donc ton prog supprime bien là où tu as fait l'update?
    Si oui dsl je ne vois pas...

  7. #7
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 29
    Par défaut
    pa est un alias, tout comme pb, pour pr0

    seul pr0 est modifié donc

  8. #8
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 29
    Par défaut
    Il supprime mais de trop...


    je suis sur le chemin de la résolution

  9. #9
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 29
    Par défaut
    La requête qui fonctionne est la suivante :
    update pr0 pa
    set template = '2', DMOD = sysdate

    where rowid not in (
    select max(rowid)
    from pr0 pb
    where (pb.var3 = pa.var3)
    and var3 is not null
    )
    ;

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

Discussions similaires

  1. jointure sur plusieurs tables fonctionne pas
    Par jmsch dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/11/2010, 21h55
  2. [SQL] un create table qui devrait fonctionner
    Par klerdesign dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/06/2006, 14h05
  3. Réponses: 8
    Dernier message: 09/05/2006, 11h08
  4. Fonctionnement des attributions de droits sur table et bdd ?
    Par shako95 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/11/2005, 13h39
  5. Dédoublonnage pdt copie une table a une autre
    Par Krevette dans le forum Requêtes
    Réponses: 3
    Dernier message: 15/10/2003, 14h26

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