Comment faire une instruction UPDATE avec JOIN dans SQL Server ?

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