Składnia ściśle zależy od tego, jakiego SQL DBMS używasz. Oto kilka sposobów na zrobienie tego w ANSI/ISO (powinno działać na każdym SQL DBMS), MySQL, SQL Server i Oracle. Pamiętaj, że moja sugerowana przeze mnie metoda ANSI/ISO będzie zwykle znacznie wolniejsza niż pozostałe dwie metody, ale jeśli używasz SQL DBMS innego niż MySQL, SQL Server lub Oracle, może to być jedyna droga (np. jeśli twój DBMS SQL nie obsługuje 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
Serwer SQL:
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;
Zauważ, że tabela docelowa nie może się powtarzać w FROM
klauzula dla Postgresa.
Wyrocznia:
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
);