使用另一个表的列值更新表中的所有列值(由外键关联)

时间:2010-07-28 09:48:42

标签: sql sql-server sql-update

我正在尝试使用驻留在另一个表的列中的数据填充表中的新列。

    UPDATE  dbo.PackageSessionNodes
    SET     Created_By = 
               (select userid from dbo.PackageSessions, dbo.PackageSessionNodes 
                where  dbo.PackageSessions.PackageSessionId 
                        = dbo.PackageSessionNodes.PackageSessionId)

由于子查询返回多个值,更新失败。 我显然是一个sql noob,所以任何帮助都会受到赞赏。

THX!

2 个答案:

答案 0 :(得分:4)

我认为您正在寻找这种语法:

update dbo.PackageSessionNodes set Created_By = p.userid
from dbo.PackageSessionNodes pn
left join dbo.PackageSessions p on p.PackageSessionId = pn.PackageSessionId

我假设一个PackageSessionNode只能有一个PackageSession?

答案 1 :(得分:0)

您的原始查询正在进行笛卡尔联接,这可能会解释多个结果

替换

dbo.PackageSessions , dbo.PackageSessionNodes 

  dbo.PackageSessions

并添加DISTINCT

UPDATE  dbo.PackageSessionNodes
SET     Created_By = 
           (select DISTINCT userid from dbo.PackageSessions 
          where  dbo.PackageSessions.PackageSessionId = 
             dbo.PackageSessionNodes.PackageSessionId)

如果您返回了多个不同的结果,则仍然会失败,在这种情况下您需要定义要使用的结果。