使用自连接子查询更新

时间:2018-11-02 11:02:04

标签: mysql sql

问题:

  

主管(employee_id等于114)已辞职。   公司,今天是工作的最后一天。即日起,   他管理的部门,他监督的所有员工   由上司接管

所以我想出的语法是:

UPDATE EMPLOYEE
   SET supervisor_id = (SELECT supervisor_id
                          FROM EMPLOYEE
                         WHERE employee_id = '114'),
 WHERE supervisor_id = '114';

输出: 错误1093(HY000):您无法在FROM子句中指定目标表“ EMPLOYEE”进行更新

但是它是错误的。我知道supervisor_id = 100,但是我不只是想放SET supervisor_id = 100,因为直接放100 似乎不公平。谁能帮我纠正?

2 个答案:

答案 0 :(得分:0)

UPDATE EMPLOYEE a 
  join 
     ( SELECT supervisor_id
            , employee_id  
         FROM EMPLOYEE 
        WHERE employee_id = '114'
     ) b 
    on a.supervisor_id = b.employee_id 
   set a.supervisor_id = b.supervisor_id 

使用此查询

答案 1 :(得分:0)

在MySQL中,您不能为INSERT/UPDATE/DELETE引用同一表。但是您可以在此处使用子查询作为解决方法。 尝试以下类似的方法...

UPDATE EMPLOYEE 
   SET EMPLOYEE.supervisor_id = (SELECT supervisor_id
                                  FROM (SELECT * FROM EMPLOYEE) EmpFull
                                 WHERE employee_id = '114'),
 WHERE supervisor_id = '114';

参考here