Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment puis-je 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 dans ANSI/ISO (c'est-à-dire 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 peut être la seule solution (par ex. 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 le FROM clause pour Postgres.

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
 );