我需要使用其“父”表中的数据更新SQL Server 2005中的此表,请参见下文:
销售
id (int)
udid (int)
assid (int)
ud
id (int)
assid (int)
sale.assid
包含更新ud.assid
的正确值。
什么查询将执行此操作? 我正在考虑join
但不确定是否可行。
#1楼
这应该在SQL Server中起作用:
update ud
set assid = sale.assid
from sale
where sale.udid = id
#2楼
语法严格取决于您使用的SQL DBMS。 这里有一些在ANSI / ISO(也可以在任何SQL DBMS中使用),MySQL,SQL Server和Oracle上完成此操作的方法。 请注意,我建议的ANSI / ISO方法通常比其他两种方法慢得多,但是如果您使用的是MySQL,SQL Server或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 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 ud.assid = s.assid
from s