Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/04/2011, 11h48   #1
Membre actif
 
Inscription : mai 2004
Messages : 725
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 725
Points : 193
Points : 193
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 :
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)
Battosaiii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2011, 13h46   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 442
Points : 10 442
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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 :
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);
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 13/04/2011, 17h59   #3
Membre actif
 
Inscription : mai 2004
Messages : 725
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 725
Points : 193
Points : 193
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+
Battosaiii est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h23.


 
 
 
 
Partenaires

Hébergement Web