对于学校,我有以下任务将数据更新到数据库中:
Give all the employees (located into the employee table) who work on a project where the employee "50" (employee code) works on as well a salary raise of 250 euro
我知道我必须在 employee 中获得 SAL
列,然后将其提高 250 欧元。我目前通过以下查询完成此操作。
UPDATE `work` AS work
INNER JOIN `employee` AS employee ON employee.`CODE` = work.`W_CODE`
SET employee.`SAL` = (employee.`SAL` + 250)
WHERE work.`P_CODE` IN ( # .... );
P_CODE
列代表项目标识符。在 work
表中,列出了他们正在从事的当前项目的所有 employee。
为了获取代码为 50 的员工 工作的项目,我进行了以下子查询:
UPDATE `work` AS work
INNER JOIN `employee` AS employee ON employee.`CODE` = work.`W_CODE`
SET employee.`SAL` = (employee.`SAL` + 250)
WHERE work.`P_CODE` IN (SELECT work.`P_CODE`
FROM `work` AS work
INNER JOIN `employee` AS employee ON `employee`.`CODE` = work.`W_CODE`
WHERE employee.`CODE` = "50");
运行此查询时,出现此错误:
Error Code: 1093. Table 'work' is specified twice, both as a target for 'UPDATE' and as a separate source for data
为了我自己的尝试,我做了一些研究,发现我不能为此使用同一张表两次。
问题
如何在子查询起作用的地方修正这个查询?可以在我第一次加入时合并吗?
最佳答案
尝试使用不同的别名,例如:w1 和 w2 for work
UPDATE `work`
AS w1
INNER JOIN `employee` AS employee
on employee.`CODE` = w1.`W_CODE`
SET employee.`SAL` = (employee.`SAL` + 250)
WHERE w1.`P_CODE` IN ( select t.my_code from (
SELECT w2.`P_CODE` as my_code
FROM `work` AS w2
INNER JOIN `employee` AS employee
ON `employee`.`CODE` = w2.`W_CODE`
WHERE employee.`CODE` = "50"
) t ) ;
关于带有所需子查询的 MySQL UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39935718/