【问题标题】:Query for replacing a column value in one table by its id in another table用另一个表中的 id 替换一个表中的列值的查询
【发布时间】:2013-09-25 15:24:21
【问题描述】:

我有两个表employee 和department,我想使用单个查询将employee 表中的部门名称替换为department id 中的department?

【问题讨论】:

  • 为什么要使用问号?这只是一个信息......好吧,你想知道那很好。

标签: mysql join subquery


【解决方案1】:

这样的东西应该可以工作

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

【讨论】:

  • @user1944725:然后您应该添加department_id 类型的int 字段,进行更新,然后删除deparment name 列。您不想将数字存储在字符串列中,对吧?
【解决方案2】:

这是你要找的吗?

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

【讨论】:

    【解决方案3】:

    实际上他/她在这里陈述问题的方式存在一些问题。

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

    表格:员工

    |-----------------------------------|
    | 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 更改为字符串数据类型,这样上面的查询就会执行而不会出错。

    但在这种情况下,我认为您只需要第一个场景。

    【讨论】:

      猜你喜欢
      • 2020-03-20
      • 2019-04-10
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 2021-01-01
      • 1970-01-01
      相关资源
      最近更新 更多