Comment faire une instruction UPDATE avec JOIN dans SQL Server ?
La syntaxe dépend strictement du SGBD SQL que vous utilisez. Voici quelques façons de le faire en ANSI/ISO (c’est-à-dire qui devrait fonctionner sur n’importe quel SGBD SQL), MySQL, SQL Server et Oracle. Sachez que ma méthode ANSI/ISO suggérée sera généralement beaucoup plus lente que les deux autres méthodes, mais si vous utilisez un SGBD SQL autre que MySQL, SQL Server ou Oracle, cela pourrait être la seule solution possible (par exemple, si votre SGBD SQL ne prend pas en charge MERGE) :
ANSI/ISO :
update ud
set assid = (
select sale.assid
from sale
where sale.udid = ud.id
)
where exists (
select *
from sale
where sale.udid = ud.id
);
MySQL :
update ud u
inner join sale s on
u.id = s.udid
set u.assid = s.assid
SQL Server :
update u
set u.assid = s.assid
from ud u
inner join sale s on
u.id = s.udid
PostgreSQL :
update ud
set assid = s.assid
from sale s
where ud.id = s.udid;
Notez que la table cible ne doit pas être répétée dans la clause FROM pour PostgreSQL. Question principale : Comment faire un update + join dans PostgreSQL ?
Oracle :
update
(select
u.assid as new_assid,
s.assid as old_assid
from ud u
inner join sale s on
u.id = s.udid) up
set up.new_assid = up.old_assid
SQLite :
update ud
set assid = (
select sale.assid
from sale
where sale.udid = ud.id
)
where RowID in (
select RowID
from ud
where sale.udid = ud.id
);
SQLite 3.33 a ajouté la prise en charge d’une syntaxe UPDATE + FROM analogue à celle de PostgreSQL :
update ud
set assid = s.assid
from sale s
where ud.id = s.udid;
Question principale : Update avec Join dans SQLite