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