2013-10-24 153 views
0

下面是我的困境:SQL服務器:基於在同一個表的另一列到另一個表的列中的匹配值在一個表中的列的更新值

  • table1有列的員工,employeeID
  • table2有列uniqueEmployeeNameid

  • table1employeeID到的主鍵的外鍵約束,id

  • employeetable1可以table1匹配uniqueEmployeeName值之一table2
  • employeeID目前是空的,我想基於在table1匹配employeeuniqueEmployeeNametable2的列id進行更新在table2

這是我到目前爲止有:

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

的問題是,查詢只運行不休,所以我不知道在我的詢問出了什麼問題什麼我想做的事情。任何人都可以看到我的邏輯出錯了嗎?

這裏的例子應該是之前和之後的樣子:

BEFORE:

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

AFTER:

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

你的桌子有多大?它仍在運行還是你殺了查詢?如果你有非常大的表,你可能只需要讓這個查詢運行直到完成。 – Vulcronos

回答

0

如果有表1可以使用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 
相關問題