невозможно обновить, чтобы обновить таблицу, так как она используется в условии from в подзапросе - PullRequest
0 голосов
/ 28 марта 2019
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

Ответы [ 3 ]

1 голос
/ 28 марта 2019

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

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.

0 голосов
/ 28 марта 2019

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

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;
0 голосов
/ 28 марта 2019

использование 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...