MySQL # 1093 - Вы не можете указывать целевые таблицы "раздачи" для обновления в предложении FROM
Я пробовал:
UPDATE giveaways SET winner = '1' WHERE ID = (SELECT MAX(ID) FROM giveaways)
Но он дает:
# 1093 - Вы не можете указывать целевые таблицы "раздачи" для обновления в разделе FROM
Эта статья кажется актуальной, но я не могу ее адаптировать к моему запросу. Как я могу заставить его работать?
Ответы
Ответ 1
Это связано с тем, что ваше обновление может быть циклическим... что, если обновление этой записи приведет к чему-то, что сделало условие WHERE
FALSE
? Вы знаете, что это не тот случай, но у двигателя нет. Там также могут быть противоположные блокировки на столе в операции.
Я бы подумал, что вы можете сделать это так (непроверенный):
UPDATE
giveaways
SET
winner = '1'
ORDER BY
id DESC
LIMIT 1
Прочитайте больше
Ответ 2
Основываясь на информации, приведенной в этой статье, вы должны работать:
update giveaways set winner='1'
where Id = (select Id from (select max(Id) as id from giveaways) as t)
Ответ 3
update giveaways set winner=1
where Id = (select*from (select max(Id)from giveaways)as t)
Ответ 4
create table GIVEAWAYS_NEW as(select*from giveaways);
update giveaways set winner=1
where Id=(select max(Id)from GIVEAWAYS_NEW);
Ответ 5
Используйте TEMP TABLE:
следующим образом:
UPDATE TABLE_NAME SET TABLE_NAME.IsActive=TRUE
WHERE TABLE_NAME.Id IN (
SELECT Id
FROM TEMPDATA
);
CREATE TEMPORARY TABLE TEMPDATA
SELECT MAX(TABLE_NAME.Id) as Id
FROM TABLE_NAME
GROUP BY TABLE_NAME.IncidentId;
SELECT * FROM TEMPDATA;
DROP TABLE TEMPDATA;
Ответ 6
Сначала вы можете создать представление подзапроса, а затем выбрать update/delete из представления.
Просто не забудьте оставить представление после.