0

这是我的困境:

  • table1有列员工,employeeID
  • table2有列uniqueEmployeeNameid

  • table1employeeID对, 的主键有table2外键约束id

  • employeein列table1可以匹配 in 的值uniqueEmployeeName之一table2
  • employeeIDin列table1当前为空,我想根据与 in 匹配的'列table2更新它。idemployeetable1uniqueEmployeeNametable2

这是我到目前为止所拥有的:

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
4

1 回答 1

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
于 2013-10-24T20:53:29.213 回答