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 lumière :-)
Merci

PS : c'est sous mysql mais le principe reste certainement vrai quel
que soit le sgbd.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
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