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 :

Comment faire SET sur une table lié a 3 autres tables


Sujet :

Oracle

  1. #1
    Battosaiii
    Invité(e)
    Par défaut Comment faire SET sur une table lié a 3 autres tables
    Bonjour,

    Je suis un peu perdu avec les commandes SQL.

    J'aimerais pouvoir faire un update sur la table DOCUMENT lorsque on a cette condition

    CONCAT(RADIOLOGIE.ID_DEMANDE,RADIOLOGIE.ID_EXAMEN) = SAG_DATA.S_APHP_REFERENCE_ACTE_RADOS

    La table RADIOLOGIE et lié avec la table DOCUMENT avec leurs ID_DOCUMENT

    Lorsque cette condition est remplie on fait un update sur la table DOCUMENT su type SET DOCUMENT.NDA=SAG_DATA.NDA

    Je ne suis pas sur de ma solution. J'aimerais donc une confirmation que ma solution est bonne ou non :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE DOCUMENT
     
    SET (DOCUMENT.NDA) = (SELECT SAG_DATA.NDA FROM SAG_DATA,RADIOLOGIE,DOCUMENT WHERE CONCAT(RADIOLOGIE.ID_DEMANDE,RADIOLOGIE.ID_EXAMEN) = SAG_DATA.S_APHP_REFERENCE_ACTE_RADOS AND (RADIOLOGIE.ID_DOCUMENT_LIE = DOCUMENT.ID_DOCUMENT OR RADIOLOGIE.ID_DOCUMENT_LIE = DOCUMENT.ID_DOCUMENT_INITIAL)
     
    WHERE EXISTS (SELECT SAG_DATA.NDA FROM SAG_DATA,RADIOLOGIE,DOCUMENT WHERE CONCAT(RADIOLOGIE.ID_DEMANDE,RADIOLOGIE.ID_EXAMEN) = SAG_DATA.S_APHP_REFERENCE_ACTE_RADOS AND (RADIOLOGIE.ID_DOCUMENT_LIE = DOCUMENT.ID_DOCUMENT OR RADIOLOGIE.ID_DOCUMENT_LIE = DOCUMENT.ID_DOCUMENT_INITIAL)

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Ce n'est pas la peine de remettre la table DOCUMENT dans vos sous-requêtes puisqu'elle est déjà présente au niveau de votre update.
    L'utilisation des alias de table facilite lecture et compréhension, utilisez-les !

    Les jointures écrites dans votre code ne reflètent pas la description que vous en avez faites.

    Votre description se traduit ainsi, en utilisant les opérateurs normatifs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    update document doc
       set doc.nda = (select sda.nda
                        from sag_data sda
                             inner join radiologie rad
                               on rad.id_demande || rad.id_examen = sda.s_aphp_reference_acte_rados
                       where rad.id_document = doc.id_document)
     where exists (select null
                     from sag_data sda
                          inner join radiologie rad
                            on rad.id_demande || rad.id_examen = sda.s_aphp_reference_acte_rados
                    where rad.id_document = doc.id_document);

  3. #3
    Battosaiii
    Invité(e)
    Par défaut
    Je te remercie beaucoup . D'apres mes premiers tests ca marche !
    Que fait au juste INNER JOIN ON ?
    J'ai du mal a voir la difference entre ce que j'ai fait.

    A+

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/05/2010, 20h48
  2. Réponses: 3
    Dernier message: 25/09/2009, 11h48
  3. Réponses: 7
    Dernier message: 29/07/2008, 08h39
  4. Réponses: 20
    Dernier message: 30/03/2008, 01h33
  5. comment se positionner sur une ligne de table mysql ?
    Par pas30 dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/01/2007, 13h43

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