2012-08-02 85 views
0

我有表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

回答

1

根據您告訴我們的情況,您根本不需要自己加入,即您可以直接更新員工的經理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