Syntaxe přísně závisí na tom, který SQL DBMS používáte. Zde je několik způsobů, jak to udělat v ANSI/ISO (aka by mělo fungovat na jakémkoli SQL DBMS), MySQL, SQL Server a Oracle. Mějte na paměti, že mnou navrhovaná metoda ANSI/ISO bude obvykle mnohem pomalejší než ostatní dvě metody, ale pokud používáte SQL DBMS jiný než MySQL, SQL Server nebo Oracle, může to být jediný způsob, jak jít (např. pokud váš SQL DBMS nepodporuje 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;
Pamatujte, že cílová tabulka se nesmí v FROM
opakovat klauzule pro 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
);