SQL Server:根据同一个表中另一列与另一个表的列的匹配值,更新一个表中列的值

时间:2013-10-24 19:51:13

标签: sql sql-server-2008

这就是我所面临的困境:

  • table1包含employee employee employeeID
  • table2uniqueEmployeeNameid

  • table1employeeID的主要密钥table2 id有外键约束。

  • {li} employee中的table1列可以匹配uniqueEmployeeNametable2的其中一个值 {li} employeeID中的table1列目前为空,我希望根据table2id的匹配employee列更新table1 {1}} uniqueEmployeeName中的table2。{/ li>

这是我到目前为止所做的:

update table1 
set table1.employeeID = (select distinct id 
                         from table2 
                         where uniqueEmployeeName = table1.employee)

问题是查询只是无休止地运行,所以我不确定我的查询出错了我想做什么。任何人都可以看到我的逻辑出错了吗?

这是前后应该是什么样子的例子:

在:

table1                                   table2                                
employee      employeeID                 uniqueEmployeeName     id
bob                                      peter                  1
saget                                    pipper                 2
                                         saget                  3
                                         bob                    4

在:

table1                                   table2                                
employee      employeeID                 uniqueEmployeeName     id
bob           4                          peter                  1
saget         3                          pipper                 2
                                         saget                  3
                                         bob                    4

1 个答案:

答案 0 :(得分:0)

如果table1中有太多记录,则可以在update语句中使用TOP()。内部联接也应该有所帮助。

declare @rows int
set @rows = 1
while @rows > 0
BEGIN
update top (1000) table1 
set employeeID = table2.id 
from table2 inner join table1 on table2.uniqueEmployeeName = table1.employee
where table1.employeeID is null
-- or table1.employeeID = ""
set @rows = @@ROWCOUNT
END