не удается обновить таблицу, поскольку она используется в предложении from в подзапросе

#mysql #sql

#mysql #sql

Вопрос:

 UPDATE qn_answers
SET `GRADE` = -100
WHERE `QSN_ID` IN (SELECT q.`ID` FROM `questions` q
LEFT JOIN qn_answers qa ON q.`ID` = qa.`QSN_ID`
WHERE q.`QSN_TYPE_ID` = 3 AND qa.`ISCORRECT` = 0 AND qa.`GRADE` = 0);
  

Я пытаюсь обновить столбец на основе результата из таблицы объединения, но он выдает ОШИБКУ: 1093

Ответ №1:

Я думаю, вы хотите, чтобы обновление присоединилось здесь, без подзапроса:

 UPDATE qn_answers qa
INNER JOIN questions q
    ON qa.QSN_ID = q.ID
SET GRADE = -100
WHERE
    q.QSN_TYPE_ID = 3 AND
    qa.ISCORRECT = 0  AND
    qa.GRADE = 0;
  

Сообщение об ошибке связано с тем, что вы используете целевую таблицу qn_answers как часть объединения. Вы не можете сделать это напрямую в обновлении MySQL.

Ответ №2:

использовать join update

 UPDATE qn_answers a
join 
(SELECT q.`ID` FROM `questions` q
LEFT JOIN qn_answers qa ON q.`ID` = qa.`QSN_ID`
WHERE q.`QSN_TYPE_ID` = 3 AND qa.`ISCORRECT` = 0 AND qa.`GRADE` = 0
) b on a.`QSN_ID`=b.`ID`
SET `GRADE` = -100
  

Ответ №3:

Я думаю, что стандартное обновление также будет работать здесь. Попробуйте это:

 UPDATE qa
SET `GRADE` = -100
FROM 
`questions` q
LEFT JOIN
`qn_answers` qa
ON
q.`ID` = qa.`QSN_ID`
WHERE q.`QSN_TYPE_ID` = 3 AND qa.`ISCORRECT` = 0 AND qa.`GRADE` = 0;