艰难的SQL更新

时间:2010-09-01 15:44:03

标签: sql sql-server-2005

2个数据库QF AND TK

QF有以下内容:

想象一下,您有一个名为FunctionalGroup的表,其中包含以下数据:

FunctionalGroupID | FunctionalGroup
1                    Engineering
2                    Purchasing

一张表是一组登录名,带有一个functionalgroupID来引用该人所在的群组......

LoginID | FunctionalGroupID | Login
1                  1           Jon
2                  1           Joe
3                  2           Jane

所以Jon和Joe正在工程,而Jane正在购买......足够简单

现在还有另一个数据库TK。

TK有以下表格登录此效果:

Login | FunctionalGroupID
Jon          Purchasing
Joe          Purchasing
Jane         Purchasing

请注意此数据库中的Jon和Joe现在是采购组的一部分......但请注意该字段是文本字段而不是ID。所以我想要做的是使用此表作为主数据源并更新QF表,以便QF中的登录表现在如下所示:

LoginID | FunctionalGroupID | Login
1                  2           Jon
2                  2           Joe
3                  2           Jane

这是更新此表,通过设置其functionalgroupid = 2使Jon和Joe成为采购组的一部分。因为2表示购买。

我试过了:

UPDATE
Login 
SET Login.FunctionalGroupID = FunctionalGroup.FunctionalGroupID
FROM Login INNER JOIN
TKKCommonData.dbo.Login lz
ON lz.Login = Login.Login
AND lz.FunctionalGroupID = FunctionalGroup.FunctionalGroup

但是我收到了一个错误:

Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "FunctionalGroup.FunctionalGroup" could not be bound.

这看起来很简单,但我不知道如何编写更新语句。我只想通过Login(这是用户名)加入表,然后按功能组名称加入。

我甚至在周杰伦的回答中尝试了这个编辑错误消息

UPDATE
QuikFix.dbo.Login 
SET QuikFix.dbo.Login.FunctionalGroupID = QuikFix.dbo.FunctionalGroup.FunctionalGroupID
FROM QuikFix.dbo.Login INNER JOIN
TKKCommonData.dbo.Login 
ON TKKCommonData.dbo.Login.Login = QuikFix.dbo.Login.Login
AND TKKCommonData.dbo.Login.FunctionalGroupID = QuikFix.dbo.FunctionalGroup.FunctionalGroup
WHERE TKKCommonData.dbo.Login.LoginID= 101

2 个答案:

答案 0 :(得分:1)

您需要额外的INNER JOIN

UPDATE Login  
SET
    Login.FunctionalGroupID = FunctionalGroup.FunctionalGroupID 
FROM Login
    INNER JOIN TKKCommonData.dbo.Login lz
        ON lz.Login = Login.Login 
    INNER JOIN FunctionalGroup
        ON lz.FunctionalGroupID = FunctionalGroup.FunctionalGroup 

答案 1 :(得分:0)

为查询中的所有表而不是TKKCommonData.dbo.Login指定数据库名称,似乎无法在运行查询的数据库中找到FunctionalGroup表。