#mysql #sql #sql-update
#mysql #sql #sql-обновление
Вопрос:
Мне нужно обновить две таблицы одним запросом в зависимости от результата объединения с другой таблицей.
У меня есть tblPermutations, которые необходимо проверить по tblDictionary, и те, которые соответствуют, должны быть помечены как обработанные и вставлены в третий tblSpellathon.
Я безуспешно пробовал следующее.
UPDATE tblspellathon AS s,
(SELECT p.*
FROM tblpermutations p
INNER JOIN tbldictionary AS d ON d.Word = p.Permu AND p.`Language` = d.Lang
WHERE d.correct = -1 AND p.PermuProcessed = 0) AS p
SET p.PermuProcessed = -1, s.DerWord = p.Permu, s.WordListID = p.WordListID;
и
UPDATE tblspellathon AS s, tblpermutations AS p, tbldictionary AS d
SET p.PermuProcessed = -1, s.DerWord = p.Permu, s.WordListID = p.WordListID
WHERE p.permu = d.Word AND p.`Language` = d.Lang AND d.correct = -1 AND
p.PermuProcessed = 0;
По обоим вышеупомянутым запросам я получаю:
SQL Error (1205): Lock wait timeout exceeded; try restarting transaction
Affected rows: 0 Found rows: 0 Warnings: 0 Duration for 0 of 1 query: 0.000 sec.
Спасибо
Комментарии:
1. каков ключ соединения этой таблицы tblspellathon с другими?
2. Вам нужно условие объединения для
tblspellathon
, в противном случае он попытается установить каждую строку в таблице.3. Вы уверены, что вам следует обновлять
tblspellathon
? В тексте вопроса говорится, что его нужно вставить в него, а не обновлять.4. вы не можете выполнить вставку и обновление в одном запросе.
5. @RaymondNijland Нет. Он хочет вставить в одну таблицу и обновить другую таблицу, а не вставить или обновить в той же таблице.