構文は、使用しているSQLDBMSによって厳密に異なります。 ANSI / ISO(別名、任意のSQL DBMSで動作するはずです)、MySQL、SQL Server、およびOracleでこれを行ういくつかの方法があります。私が提案したANSI/ISO方式は、通常、他の2つの方式よりもはるかに低速ですが、MySQL、SQL Server、またはOracle以外のSQL DBMSを使用している場合は、それが唯一の方法である可能性があります(例: SQLDBMSが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;
FROM
でターゲットテーブルを繰り返さないように注意してください。 Postgresの句。
オラクル:
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
);