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




ошибка 1093 (5)

update giveaways set winner=1 
where Id = (select*from (select max(Id)from giveaways)as t)

Я пытался:

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

Но это дает:

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

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


Используйте 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;

Это связано с тем, что ваше обновление может быть циклическим ... что, если обновление этой записи приведет к чему-то, что сделало условие WHERE FALSE ? Вы знаете, что это не тот случай, но у двигателя нет. Там также могут быть противоположные блокировки на столе в операции.

Я бы подумал, что вы можете сделать это так (непроверенный):

UPDATE
    giveaways
SET
    winner = '1'
ORDER BY
    id DESC
LIMIT 1

Прочитайте больше


Вы можете сначала создать представление подзапроса, а затем выбрать update / delete из представления. Просто забудьте оставить представление после.


create table GIVEAWAYS_NEW as(select*from giveaways);

update giveaways set winner=1
where Id=(select max(Id)from GIVEAWAYS_NEW);




mysql-error-1093