在SQL Server 2008中使用自连接更新表

问题描述:

我有表Employee。我需要用Excel表单更新管理器ID(获得从Excel值我已经写了下面的查询)在SQL Server 2008中使用自连接更新表

Employee 

Emp_ID Emp_Code Name ManagerID 
1  1111  xyz 2 
2  2222  abc 3 
3  3333  mno 2 

我写这样的查询

UPDATE Employee SET ManagerID = Emp_ID from Employee inner join Employee AS MGR 
on Employee.emp_id=MGR.emp_id WHERE emp_code='1111' 

,但它不是更新正确的价值

+0

您是否将Excel的值存储在表中?如果是这样,桌子的结构是什么? – 2012-08-02 06:24:04

根据您告诉我们的情况,您根本不需要自己加入,即您可以直接更新员工的经理ID直接

UPDATE Employee 
    SET ManagerID = 2 
    WHERE emp_code='1111' 

etc

但是,如果您的意思是您需要执行更新,只给出雇员的emp_code和管理者的emp_code(即,没有Manager的PK),那么你可以使用子查询(不相关的),例如,

UPDATE Employee 
    SET ManagerID = (SELECT manager.Emp_Id 
         FROM Employee manager 
         WHERE manager.emp_code = '2222') -- Manager's emp_code 
    WHERE emp_code='1111' -- Employee to update's emp_code 

如果您后来需要添加展示员工的查询和他/她的经理(并假设终极BOSS没有一个经理),你可以做自连接,像这样:

SELECT emp.emp_code as EmployeeCode, emp.name as EmployeeName, 
     mgr.emp_code as ManagerEmpCode, mgr.name as ManagerName 
FROM Employee emp 
    LEFT OUTER JOIN Employee mgr 
    ON emp.ManagerId = mgr.Emp_Id