在FROM子句中,您不能指定要更新的目标表“Employee”。

25 浏览
0 Comments

在FROM子句中,您不能指定要更新的目标表“Employee”。

删除Employee表中薪水最高的员工的记录。\n为什么会出现错误?能否有人帮我解决这个问题并提供解决方案的逻辑?

0
0 Comments

你无法在FROM子句中指定目标表'Employee'进行更新。这个问题的出现是因为MySQL不允许在UPDATE或DELETE语句中直接引用正在被修改的表。在上述代码中,DELETE语句试图删除Employee表中的记录,但是在FROM子句中又引用了Employee表,这就导致了错误的出现。

解决这个问题的方法是使用临时表来存储需要删除的记录,然后再通过子查询将临时表与原始表进行连接。

下面是修复这个问题的代码示例:

CREATE TEMPORARY TABLE temp
SELECT MAX(Salary) AS max_salary FROM Employee;
DELETE t1.*
FROM Employee t1
JOIN temp t2
WHERE t1.Salary = t2.max_salary;
DROP TABLE temp;

在这里,我们首先创建了一个临时表temp,它存储了Employee表中的最高薪水。然后,我们使用DELETE语句将Employee表与临时表连接起来,并删除薪水等于最高薪水的记录。最后,我们删除临时表temp。

通过这种方法,我们成功地解决了"You can't specify target table 'Employee' for update in FROM clause"这个问题。现在,代码可以正确执行,而不会引发错误。

0