Update avec jointure sur 3 tables

Messages postés
2
Date d'inscription
vendredi 4 septembre 2009
Statut
Membre
Dernière intervention
4 septembre 2009
- - Dernière réponse : bitangm
Messages postés
13
Date d'inscription
jeudi 20 août 2009
Statut
Membre
Dernière intervention
24 août 2010
- 11 août 2009 à 22:43
Avec la commande suivante je sélectionne les enregistrements à modifier.

"select distinct AD.ID_OUTIL, AD.NUMERO_DM, IA.NUMERO_AM, AD.AVANCEMENT, IA.APPLICABILITE, APD.ETAT_VALIDATION from AVANCEMENT_DM AD, APPLICATION_DM APD, IDENTIFICATION_AM IA where (AD.NUMERO_DM=APD.NUMERO_DM and AD.NUMERO_DM=IA.NUMERO_DM) and (AD.ID_OUTIL='7FN' and AD.AVANCEMENT='CLOSE' and IA.APPLICABILITE='V2_1' and APD.ETAT_VALIDATION='NO VERIFIE');"

Le champ doit passer à 'VERIFIE OK'.
J'ai essayé plusieurs solution pour l'update mais je n'en ai trouvé aucune qui fonctionne !
En voici une :

" update APPLICATION_DM As APD, AVANCEMENT_DM AS AD, IDENTIFICATION_AM AS IA set (APD.ETAT_VALIDATION='VERIFIE OK') where (AD.NUMERO_DM=APD.NUMERO_DM and AD.NUMERO_DM=IA.NUMERO_DM and AD.ID_OUTIL='7FN' and AD.AVANCEMENT='CLOSE' and IA.APPLICABILITE='V2_1' and APD.ETAT_VALIDATION='NO VERIFIE');"
Si quelqu'un peut m'aider :-)
Afficher la suite 

1 réponse

Messages postés
13
Date d'inscription
jeudi 20 août 2009
Statut
Membre
Dernière intervention
24 août 2010
0
Merci
Tout dépend du SGBD que tu utilise,
tu trouveras ci-dessous des exemples complets

--Pour Access, MySQL
UPDATE APPLICATION_DM As APD, AVANCEMENT_DM AS AD, IDENTIFICATION_AM AS IA
SET APD.ETAT_VALIDATION = 'VERIFIE OK'
WHERE (AD.NUMERO_DM = APD.NUMERO_DM)
AND (AD.NUMERO_DM=IA.NUMERO_DM)
AND (AD.ID_OUTIL='7FN')
AND (AD.AVANCEMENT='CLOSE')
AND (IA.APPLICABILITE='V2_1')
AND (APD.ETAT_VALIDATION='NO VERIFIE');

--Pour SQL SERVER
UPDATE APD
SET APD.ETAT_VALIDATION = 'VERIFIE OK'
FROM APPLICATION_DM As APD, AVANCEMENT_DM AS AD, IDENTIFICATION_AM AS IA
WHERE (AD.NUMERO_DM = APD.NUMERO_DM)
AND (AD.NUMERO_DM=IA.NUMERO_DM)
AND (AD.ID_OUTIL='7FN')
AND (AD.AVANCEMENT='CLOSE')
AND (IA.APPLICABILITE='V2_1')
AND (APD.ETAT_VALIDATION='NO VERIFIE');

--Pour Oracle, FireBird, InterBase, DB2...

Formule 1 :
=========
UPDATE APPLICATION_DM As APD
SET APD.ETAT_VALIDATION = 'VERIFIE OK'
WHERE APD.ETAT_VALIDATION='NO VERIFIE'
AND APD.NUMERO_DM IN
(SELECT IA.NUMERO_DM
FROM AVANCEMENT_DM AS AD, IDENTIFICATION_AM AS IA
WHERE (AD.NUMERO_DM = APD.NUMERO_DM)
AND (AD.NUMERO_DM=IA.NUMERO_DM)
AND (AD.ID_OUTIL='7FN')
AND (AD.AVANCEMENT='CLOSE')
AND (IA.APPLICABILITE='V2_1')
)
;

Formule 2 :
=========
UPDATE APPLICATION_DM As APD
SET APD.ETAT_VALIDATION = 'VERIFIE OK'
WHERE APD.ETAT_VALIDATION='NO VERIFIE'
AND EXISTS
(SELECT IA.NUMERO_DM
FROM AVANCEMENT_DM AS AD, IDENTIFICATION_AM AS IA
WHERE (AD.NUMERO_DM = APD.NUMERO_DM)
AND (AD.NUMERO_DM=IA.NUMERO_DM)
AND (AD.ID_OUTIL='7FN')
AND (AD.AVANCEMENT='CLOSE')
AND (IA.APPLICABILITE='V2_1')
)
;
Commenter la réponse de bitangm