2012-09-24 53 views
2

我有两个表;SQL Server 2005更新与查询表查询

技术查找表

OSID OSValue 

1  UNIX    
2  ORACLE    
3  .NET 
4  SQL  
5  SAP 

------------------ 

员工技术

empID OSID 

34  1 
37  2 
45  2 
34  4 
45  6 

员工ID号37是不使用Oracle。他转移到SAP。那就是OSID应该在第二个表中从2更新到5。

我有了技术和员工ID瓦莱斯一个临时表

请帮我 - 编写连接两个以上表的查询 - 查找SAP技术的ID,并更新第二带有该ID的表格。

Update emp 
Set emp.OSID = (Select OSID from technologylookup where OSValue = tmptbl.technologyname) 
FROM employee_tech emp INNER JOIN #Temptbl tmptbl ON emp.emp_id = tmptbl.emp_id 

回答

3

加入您的查找表,临时表,然后从该表

Update emp 
    Set emp.OSID = tl.OSID 
FROM employee_tech emp 
INNER JOIN #Temptbl tmptbl 
    ON emp.emp_id = tmptbl.emp_id 
INNER JOIN technologylookup tl 
    ON tl.OSValue COLLATE DATABASE_DEFAULT = tmptbl.technologyname 
+0

感谢您的帮助。您的答案似乎正确,但出现以下错误 – user1681514

+0

无法解决等于操作中“Latin1_General_CI_AI”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突。 – user1681514

+0

COLLATE DATABASE_DEFAULT在连接 – William

0

从我脑袋里的,未经测试的更新与ID的employee_tech表:

update employee_tech 
set osid = t.osid 
from #Temptbl tmp 
inner join employee_tech e on e.emp_id = tmp.emp_id 
inner join technologylookup t on t.osvalue = tmp.technologyname 
0

如果'临时表'中的'技术'等于ID,您可以像这样更新。

UPDATE employee_tech 
SET OSID = (SELECT technology FROM #Temptbl AS T INNER JOIN employee_tech AS E ON T.empID = E.empID)