sql >> Databasteknik >  >> RDS >> Sqlserver

Hur kan jag göra en UPDATE-sats med JOIN i SQL Server?

Syntax beror helt på vilken SQL DBMS du använder. Här är några sätt att göra det i ANSI/ISO (aka borde fungera på alla SQL DBMS), MySQL, SQL Server och Oracle. Observera att min föreslagna ANSI/ISO-metod vanligtvis kommer att vara mycket långsammare än de andra två metoderna, men om du använder en annan SQL DBMS än MySQL, SQL Server eller Oracle, kan det vara den enda vägen att gå (t.ex. om din SQL DBMS inte stöder 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;

Observera att måltabellen inte får upprepas i FROM klausul för 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
 );


  1. Varför ökar MySQL autoinkrement vid misslyckade insättningar?

  2. Barman Cloud – Del 1:WAL Archive

  3. ASCIISTR() Funktion i Oracle

  4. CHECK-klausulen för uppdateringsbara vyer