语法严格取决于所使用的SQL DBMS。下面是在ANSI/ISO(也就是应该在任何SQL DBMS上工作)、MySQL、SQL Server和Oracle中实现该功能的一些方法。请注意,我建议的ANSI/ISO方法通常要比其他两种方法慢得多,但是如果您使用的是MySQL、SQLServer或Oracle以外的SQL DBMS,那么这可能是唯一的方法(例如,如果您的SQL DBMS不支持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 uinner join sale s on
u.id = s.udidset u.assid = s.assid
SQLServer:update uset u.assid = s.assidfrom ud u inner join sale s on
u.id = s.udid
PostgreSQL:update ud set ud.assid = s.assidfrom sale s
where ud.id = s.udid;
请注意,目标表不能在FROM邮政保险条款。
甲骨文:update
(select
u.assid as new_assid,
s.assid as old_assid from ud u inner join sale s on
u.id = s.udid) upset 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 );