查询将一个表中的列值替换为另一个表中的id

时间:2013-09-20 09:34:11

标签: mysql join subquery

我有两个表员工和部门,我想使用单个查询从部门ID部门ID替换员工表中的部门名称?

3 个答案:

答案 0 :(得分:0)

这样的事情应该有效

update employee e
inner join department d on e.dept_name = d.name
set e.dept_id = d.id

答案 1 :(得分:0)

这是你在找什么?

UPDATE EMPLOYEE E AS 
    INNER JOIN DEPARTMENT D 
        ON E.DEPT_NAME = D.DEPT_NAME 
SET E.DEPT_NAME = D.DEPT_ID;

答案 2 :(得分:0)

实际上,他/她在这里如何陈述问题存在一些问题。

但根据我的想法并假设情况应该是这样的(如果我错了,请纠正我):

表:员工

|-----------------------------------|
| Id | EmployeeName | DepartmentId  |
|-----------------------------------|
| 1  | Employee A    | 1            |
| 2  | Employee B    | 2            |
| 3  | Employee C    | 1            |
|-----------------------------------|

表:部门

|--------------------|
| Id | DeparmentName |
|--------------------|
| 1  | Department A  |
| 2  | Department B  |
| 3  | Department C  |
|--------------------|

期望的输出

|-------------------------------------|
| Id | EmployeeName  | DepartmentName |
|-------------------------------------|
| 1  | Employee A    | Department A   |
| 2  | Employee B    | Department B   |
| 3  | Employee C    | Department A   |
|-------------------------------------|

问题:您希望查看或记录更新的目的是什么?

情景1: 因为如果它只是为了查看而不需要更新,因为上面的内容可以使用连接查询生成。

SELECT e.Id, e.EmployeeName, d.DepartmentName
FROM Employee e
INNER JOIN Deparment d
ON e.DepartmentId = d.Id

情景2: 但是如果它是用于记录更新,则会出现问题,因为DepartmentId是数字数据类型,而Department name是字符串数据类型。

UPDATE Employee e
INNER JOIN Department d
ON e.DepartmentId = d.Id
SET e.DepartmentId = d.DepartmentName

但是上面的代码会导致我上面提到的错误,所以你可以用一个字符串数据类型更改DepartmentId,这样就可以执行上面的查询而不会出错。

但在这种情况下,我认为你只需要第一种情况。