OVH Cloud OVH Cloud

update avec jointure

8 réponses
Avatar
Etienne SOBOLE
salut.

comment on fait un update avec une jointure?
par exemple j'ai des clients et des commandes...
j'aimerai mettre a jour un champ dans le table commande pour tous les
clients dont le code postal est 75012

update commande set blabal = 1 where idclient in (select idclient from
client where codepost = 75012);
fonctionne (enfin je suppose j'ai pas testé...)

je me demande juste comment on fait avec un jointure??? c'est a dire sans le
IN !

merci
Etienne

8 réponses

Avatar
Ph. B.
Etienne SOBOLE a questionné:

salut.

comment on fait un update avec une jointure?
par exemple j'ai des clients et des commandes...
j'aimerai mettre a jour un champ dans le table commande pour tous les
clients dont le code postal est 75012

update commande set blabal = 1 where idclient in (select idclient from
client where codepost = 75012);
fonctionne (enfin je suppose j'ai pas testé...)

je me demande juste comment on fait avec un jointure??? c'est a dire sans le
IN !



Comme ça:

UPDATE commande
SET blabla = 1
FROM commande co
INNER JOIN client cl ON cl.idclient = co.idclient
WHERE cl.codepost = 75012;


merci
Etienne
Avatar
Etienne SOBOLE
UPDATE commande
SET blabla = 1
FROM commande co
INNER JOIN client cl ON cl.idclient = co.idclient
WHERE cl.codepost = 75012;



Byzarre. la syntaxe a l'air d'etre comprise, mais toutes mes commandes sont
modifiées dans ce cas...
Etienne
Avatar
atchoum
Etienne SOBOLE a écrit :
UPDATE commande
SET blabla = 1
FROM commande co
INNER JOIN client cl ON cl.idclient = co.idclient
WHERE cl.codepost = 75012;




Byzarre. la syntaxe a l'air d'etre comprise, mais toutes mes commandes sont
modifiées dans ce cas...
Etienne



Peut-être ceci:

UPDATE commande
SET blabla=1
JOIN client cl using(idclient)
WHERE cl.codepost='75012';

A+++
Jean-Pierre
Avatar
Etienne SOBOLE
UPDATE commande
SET blabla=1
JOIN client cl using(idclient)
WHERE cl.codepost='75012';



Nan. marche pas non plus.
bon je vais rester avec mon SELECT imbriqué ;)

C'est peut etre pas possible sous postgres...

Etienne
Avatar
Michael
Le 01/02/2005 13:11, Etienne SOBOLE a écrit :
comment on fait un update avec une jointure?
par exemple j'ai des clients et des commandes...
j'aimerai mettre a jour un champ dans le table commande pour tous les
clients dont le code postal est 75012



Essaie ceci (c'est un exemple de requête) :

UPDATE commande SET prix00
WHERE id IN (SELECT commande_id FROM client WHERE code_postal='75012');

@++

Michaël
Avatar
Michael
Le 01/02/2005 21:42, Michael a écrit :
Essaie ceci (c'est un exemple de requête) :

UPDATE commande SET prix00
WHERE id IN (SELECT commande_id FROM client WHERE code_postal='75012');



Au temps pour moi! J'ai lu le mail trop rapidement. Mince...

Michaël
Avatar
Fred BROUARD - SQLpro
dans un tel cas il ne faut pas mettre d'alias à la table cible :

update commande
set blabal = 1
where idclient = (select idclient
from client c
where c.codepost = 75012
and c.idclient = idclient)

La corrélation se fait entre c.idclient = idclient.
Les colonnes de corrélation avec la table cible doivent apparaître sans aucun
préfixe d'alias.

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************


Etienne SOBOLE a écrit:
salut.

comment on fait un update avec une jointure?
par exemple j'ai des clients et des commandes...
j'aimerai mettre a jour un champ dans le table commande pour tous les
clients dont le code postal est 75012

update commande set blabal = 1 where idclient in (select idclient from
client where codepost = 75012);
fonctionne (enfin je suppose j'ai pas testé...)

je me demande juste comment on fait avec un jointure??? c'est a dire sans le
IN !

merci
Etienne


Avatar
Jacques Caron
Salut,

On Tue, 1 Feb 2005 13:11:17 +0100, Etienne SOBOLE
wrote:

comment on fait un update avec une jointure?



man update :-)

par exemple j'ai des clients et des commandes...
j'aimerai mettre a jour un champ dans le table commande pour tous les
clients dont le code postal est 75012

update commande set blabal = 1 where idclient in (select idclient from
client where codepost = 75012);
fonctionne (enfin je suppose j'ai pas testé...)

je me demande juste comment on fait avec un jointure??? c'est a dire
sans le IN !



update commande set blabla=1 from client c where c.codepostu012 and
c.idclient=commande.idclient;

Le seul "truc" c'est que la table qu'on update fait implicitement partie
du from mais qu'il n'est pas possible de la nommer, donc on l'adresse par
son vrai nom (ou implicitement s'il n'y a pas d'ambiguïté sur les noms des
colonnes).

Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/