cur*_*ity 2 sql sql-server join sql-server-2008 sql-update
您可以在下面看到我的简化数据库模型:

由于错误,Job.location列中只有空值,其中条目属于某个计划.因此,我想更新与此计划关联的所有作业,将Job.location设置为拥有此计划的用户的Location.name.
我试过这个SQL查询:
update dbo.Job set location =
(select name from dbo.Location as loc where
loc.objectid = objectid and loc.user_id in
(select userid from dbo.[Plan] as p where p.planid = 20))
where planid = 20
Run Code Online (Sandbox Code Playgroud)
但是,结果总是:0行受影响.子查询本身可以正常工作.
如何才能实现具有特定计划的所有工作都受到影响?
我认为你错了可能是你objectid在子查询中没有列的别名loc.objectid = objectid,所以当你自己运行子查询时,它只是工作loc.objectid = loc.objectid,当你在更新中运行它时,它就像loc.objectid = dbo.Job.objectid
在你的方案有可能对用户的多个位置,但是假如你有每个用户和对象只有一个位置,你可以试试这个查询:
update dbo.Job set
location = L.Name
from dbo.Job as J
inner join dbo.[Plan] as P on P.planid = J.planid
inner join dbo.Location as L on L.user_id = P.userid and L.objectid = J.objectid
Run Code Online (Sandbox Code Playgroud)