【问题标题】:SQL Server 2008 update table with values from another tableSQL Server 2008 使用另一个表中的值更新表
【发布时间】:2012-12-12 08:29:53
【问题描述】:

您可以在下面看到我的简化数据库模型:

由于错误,Job.location 列中只有空值,其中条目属于某个 Plan。因此,我想更新与此计划关联的所有工作,将拥有此计划的 User 的 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

但是,结果始终是:0 行受影响。子查询本身可以正常工作。

我怎样才能实现具有某个planid的所有作业都受到影响?

【问题讨论】:

    标签: sql sql-server sql-server-2008 join sql-update


    【解决方案1】:

    我认为你的错误可能是你在子查询loc.objectid = 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
    

    【讨论】:

    • 谢谢你,这行得通!只需在最后一行添加 'where J.planid = 20'。
    【解决方案2】:
    UPDATE
    j
    SET Job.location = loc.name
    FROM
    Job j
    INNER JOIN Plan p ON j.planid = p.planid
    INNER JOIN aspnet_Users u ON p.userid = u.UserId
    INNER JOIN Location loc ON u.UserId = loc.user_id
    WHERE j.planid = 20 
    AND p.planid = 20
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-12
      • 2021-11-12
      • 1970-01-01
      • 2012-09-14
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多