在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'
,但它不是更新正确的价值
答
根据您告诉我们的情况,您根本不需要自己加入,即您可以直接更新员工的经理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
您是否将Excel的值存储在表中?如果是这样,桌子的结构是什么? – 2012-08-02 06:24:04