Для школы я получил следующее задание, чтобы обновить данные в базу данных:MySQL UPDATE с необходимым подзапросом
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
Я знаю, что я должен был получить 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
указаны все сотрудник с текущим проектом, над которым они работают.
Для получения проектов, где сотрудник с кодом работал, я сделал следующий подзапрос:
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
Для моей собственной попытки, я сделал некоторые исследования и нашел, что я не могу использовать одну и ту же таблицу дважды для этого.
Вопросы
Как я могу исправить этот запрос, где подзапрос будет работать? Может ли это быть объединено в моем первом соединении?
Он дает «Код ошибки: 1093. Таблица« w1 »указана дважды, как в качестве цели для« ОБНОВЛЕНИЯ », так и как отдельный источник данных. Я даже не понимаю, что происходит. – Bas
У меня есть ответ на форматирование динамической таблицы temp – scaisEdge
Почему 't' там в конце? – Bas