【发布时间】:2013-09-25 15:24:21
【问题描述】:
我有两个表employee 和department,我想使用单个查询将employee 表中的部门名称替换为department id 中的department?
【问题讨论】:
-
为什么要使用问号?这只是一个信息......好吧,你想知道那很好。
我有两个表employee 和department,我想使用单个查询将employee 表中的部门名称替换为department id 中的department?
【问题讨论】:
这样的东西应该可以工作
update employee e
inner join department d on e.dept_name = d.name
set e.dept_id = d.id
【讨论】:
department_id 类型的int 字段,进行更新,然后删除deparment name 列。您不想将数字存储在字符串列中,对吧?
这是你要找的吗?
UPDATE EMPLOYEE E AS
INNER JOIN DEPARTMENT D
ON E.DEPT_NAME = D.DEPT_NAME
SET E.DEPT_NAME = D.DEPT_ID;
【讨论】:
实际上他/她在这里陈述问题的方式存在一些问题。
但根据我对情况的看法和假设,它应该是这样的(如果我错了,请纠正我):
表格:员工
|-----------------------------------|
| 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 更改为字符串数据类型,这样上面的查询就会执行而不会出错。
但在这种情况下,我认为您只需要第一个场景。
【讨论】: