Подтвердить что ты не робот

MySQL # 1093 - Вы не можете указывать целевые таблицы "раздачи" для обновления в предложении FROM

Я пробовал:

UPDATE giveaways SET winner = '1' WHERE ID = (SELECT MAX(ID) FROM giveaways)

Но он дает:

# 1093 - Вы не можете указывать целевые таблицы "раздачи" для обновления в разделе FROM

Эта статья кажется актуальной, но я не могу ее адаптировать к моему запросу. Как я могу заставить его работать?

4b9b3361

Ответ 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 из представления. Просто не забудьте оставить представление после.