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 :

UPDATE d'un ID successeur


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 24
    Par défaut UPDATE d'un ID successeur
    bonjour à tous voici mon problème

    j'ai la table suivante :
    TOTO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ID
    CODE
    DT_CREATION
    ID_SUCCESSEUR
    Je dois mettre à jour l'ID_SUCCESSEUR, la règle est la suivante:
    le successeur a le même CODE et sa DT_CREATION est le min des DT_CREATION supérieures à l'enregistrement courant (et dont l'ID est différent de l'ID courant).

    Hormis passer par un curseur pour faire la recherche élément par élément je ne vois pas comment faire.

    Je suis bloqué par l'interdiction d'utiliser un order by dans la sous requete de selection.

    En gros, comment rendre correcte la requete suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    update TOTO a 
    set a.ID_SUCCESSEUR = ( select c.id from
    (SELECT b.ID FROM TOTO b
    WHERE a.id <> b.id
      and a.code = b.code
      and a.dt_creation < b.dt_creation ) c
    where rownum = 1)

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Essayez ainsi :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE TOTO a 
       SET a.ID_SUCCESSEUR = (SELECT MIN(b.id)
                                FROM TOTO b
                               WHERE a.code = b.code
                                 AND a.dt_creation < b.dt_creation)

  3. #3
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 24
    Par défaut
    J'y ai pensé mais il se peut que id1 < id2 et que dt_creat1 > dt_creat2

    sinon évidemment cela m'aurait simplifié la vie.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ce n'était pas précisé dans la première règle de gestion.

    S'il faut que l'id_successeur soit toujours supérieur, il suffit de rajouter le filtre :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE TOTO a 
       SET a.ID_SUCCESSEUR = (SELECT MIN(b.id)
                                FROM TOTO b
                               WHERE a.code = b.code
                                 AND a.dt_creation < b.dt_creation
                                 AND a.id < b.id);

  5. #5
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 24
    Par défaut
    Excuse moi je me suis mal exprimé
    Il n y a pas de corrélations entre les id et les dates de création.
    Je ne peux justement pas me baser sur l id pour définir in ordre

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Alors quel était le problème avec la première requête ?
    N'hésitez pas à illustrer avec un exemple.

Discussions similaires

  1. Requête update à partir d'une autre table
    Par amiral thrawn dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/02/2024, 11h40
  2. Pb d'update dans une DataGrid
    Par bidson dans le forum XMLRAD
    Réponses: 11
    Dernier message: 27/05/2003, 14h11
  3. [dBase]il y a mieux que la commande sql UPDATE ?
    Par sana72 dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 12/12/2002, 11h59
  4. Réponses: 3
    Dernier message: 10/11/2002, 11h03
  5. update et virgule
    Par Delph dans le forum Bases de données
    Réponses: 8
    Dernier message: 27/08/2002, 14h40

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