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 :

Oracle sql : Mettre a jour que les doublons


Sujet :

SQL Oracle

  1. #1
    jad
    jad est déconnecté
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Oracle sql : Mettre a jour que les doublons
    Bjr,
    Je désire mettre a jour un champ oracle (statut) que sur les doublons et sur les dates les moins recentes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    -tableA-
     
    objet       date            statut
     
    voiture     02/03/2011     2
    voiture     02/02/2011     2
    voiture     02/04/2011     2     
    velo         02/04/2011     2    
    velo         02/05/2011     2
    afin d'obtenir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    -tableA-
     
    objet       date            statut
     
    voiture     02/03/2011     3
    voiture     02/02/2011     2
    voiture     02/04/2011     3     
    velo         02/04/2011     2    
    velo         02/05/2011     3
    1-
    Je pense créer une table temporaire et copier les doublons les plus vieux avec leur rowid respectifs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select rowid from  tableA a  where rowid > (
    select min(rowid)
    from tableA b
    where b.objet= a.objet 
    );
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select * FROM tableA 
    WHERE ROWID NOT IN ( 
    SELECT max(ROWID)  
    FROM tableA GROUP BY objet HAVING count(objet)>1
    );
    2-
    puis mettre a jour le statut la table d'origine en recherchant par rowid


    merci de vos réponses.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Je désire mettre a jour un champ oracle (statut)
    ...
    et sur les dates les moins recentes.
    Quel est le formatage de la date 'dd/mm/yyyy' ou 'mm/dd/yyyy'
    Mais bon indépendamment du formatage, l'exemple proposé semble mettre à jour toutes les dates SAUF les plus anciennes (donc si l'heure tardive ne me fourvoie pas ... les plus anciennes = les moins récentes) ... et comment passe t on de 2 à 3 (juste +1 ?)

    La table temporaire me semble superflue, mais il serait bon d'apporter quelques precisions.

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    la meilleure méthode que je connaisse est avec ROW_NUMBER et ROWID.

    http://www.oracle.com/technetwork/is...om-097731.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DELETE FROM tableA 
    WHERE rowid IN
      ( SELECT rid
        FROM (
          SELECT rowid rid, 
             row_number() over 
             (partition BY obj ORDER BY dat DESC) rn  
          FROM tableA
        )
        WHERE rn > 1
     );

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    pour update

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    update tableA set status='D'
    WHERE rowid IN
      ( SELECT rid
        FROM (
          SELECT rowid rid, 
             row_number() over 
             (partition BY obj ORDER BY dat DESC) rn  
          FROM tableA
        )
        WHERE rn > 1
     );

  5. #5
    jad
    jad est déconnecté
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Points : 12
    Points
    12
    Par défaut cas doublon avec jointure
    Bjr,

    si je dois faire une dedoublonnage avec une jointure sur une autre table
    cad tableb ou j'ai des identiants unique .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    -tableB-
     
    objet date statut
     
    voiture 02/03/2011 2
    voiture 02/02/2011 2
    voiture 02/04/2011 2
    velo 02/04/2011 2
    velo 02/05/2011 2

    je dois faire cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     UPDATE tableA SET STATUS='D'
    WHERE rowid IN
      ( SELECT rid
        FROM (
          SELECT rowid rid, 
             row_number() over 
             (partition BY obj ORDER BY dat DESC) rn  
          FROM tableA,tableb
          where a.obj=b.obj
        )
        WHERE rn > 1
     );

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    essaye de nous donner des CREATE TABLE et INSERT statements afin qu'on y voit plus clair...

    MERCI

Discussions similaires

  1. Ne mettre à jour que les données modifié
    Par demanghonj dans le forum Hibernate
    Réponses: 3
    Dernier message: 10/06/2009, 15h21
  2. [Conception] Mettre a jour tout les champs d'un table lors d'un update
    Par metatron dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/09/2006, 15h29
  3. Réponses: 5
    Dernier message: 24/07/2006, 14h01
  4. [SQL Server] Requete qui affiche les doublons
    Par Vesta dans le forum Langage SQL
    Réponses: 11
    Dernier message: 26/05/2006, 13h42
  5. Réponses: 4
    Dernier message: 02/05/2006, 12h08

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