update multi-tables

Le
groumph
Soit 3 tables avec chacune deux champs
t1. id, t1.ref
t2. id, t2.val
t3. ref, t3.val

j'ai besoin de faire un update de t2.val partir de t3.val
je n'ai aucun champ commun entre t2 et t3
t1.id et t2.id sont communs
t1.ref et t3.ref sont communs

Ca fait 5 heures que je suis sur ce pb d'update et je ne vois plus
rien, alors si qqun peut rallumer la lumire :-)
Merci

PS : c'est sous mysql mais le principe reste certainement vrai quel
que soit le sgbd.
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
ALain Montfranc
Le #21861331
groumph a écrit
Soit 3 tables avec chacune deux champs
t1. id, t1.ref
t2. id, t2.val
t3. ref, t3.val

j'ai besoin de faire un update de t2.val à partir de t3.val
je n'ai aucun champ commun entre t2 et t3
t1.id et t2.id sont communs
t1.ref et t3.ref sont communs

Ca fait 5 heures que je suis sur ce pb d'update et je ne vois plus
rien, alors si qqun peut rallumer la lumière :-)
Merci

PS : c'est sous mysql mais le principe reste certainement vrai quel
que soit le sgbd.



Sous postgresql tu peux faire un update from :

update t2 set val = t3.val
from t1, t3 where t1.id = t2.id and t1.ref = t3.ref;

Mais le update from est (de mémoire) une extension à la norme)

Sinon :

update t2 set val = (select val from t1, t3 where t1.id = t2.id and
t1.ref = t3.ref) ;

Doit marcher sous reserve des unicités qui vont bien
groumph
Le #21861321
On 1 oct, 19:18, ALain Montfranc

> Soit 3 tables avec chacune deux champs
> t1. id, t1.ref
> t2. id, t2.val
> t3. ref, t3.val

> j'ai besoin de faire un update de t2.val à partir de t3.val
> je n'ai aucun champ commun entre t2 et t3
> t1.id et t2.id sont communs
> t1.ref et t3.ref sont communs


update t2 set val = (select val from t1, t3 where t1.id = t2.id and
t1.ref = t3.ref) ;

Doit marcher sous reserve des unicités qui vont bien



Et bien je dis MERCI et bravo Mossieur Alain !
Ca marche nickel chrome.

Un autre Alain qui pataugeait dans la subquery ...
Publicité
Poster une réponse
Anonyme