Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

update multi-tables

2 réponses
Avatar
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 =E0 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=E8re :-)
Merci

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

2 réponses

Avatar
ALain Montfranc
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
Avatar
groumph
On 1 oct, 19:18, ALain Montfranc wrote:

> 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 ...