26

我试过:

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

但它给出了:

#1093 - 您不能在FROM子句中为更新指定目标表“赠品”

这篇文章似乎很相关,但我无法使其适应我的查询。我怎样才能让它工作?

4

6 回答 6

38

根据您链接到此的文章中的信息,应该可以:

update giveaways set winner='1'
where Id = (select Id from (select max(Id) as id from giveaways) as t)
于 2011-11-30T21:52:20.457 回答
29

这是因为您的更新可能是周期性的……如果更新该记录会导致某些事情发生而导致该WHERE条件发生FALSE怎么办?你知道情况并非如此,但引擎不会。在操作中,桌子上也可能有相反的锁。

我认为你可以这样做(未经测试):

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

阅读更多

于 2011-11-30T21:53:02.360 回答
13
update giveaways set winner=1 
where Id = (select*from (select max(Id)from giveaways)as t)
于 2011-11-30T21:50:22.423 回答
0
create table GIVEAWAYS_NEW as(select*from giveaways);

update giveaways set winner=1
where Id=(select max(Id)from GIVEAWAYS_NEW);
于 2014-11-28T09:27:51.950 回答
0

使用 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;
于 2016-01-11T10:48:52.950 回答
0

您可以先创建子查询的视图,然后从视图中更新/删除选择。只记得在之后删除视图。

于 2016-07-11T02:49:04.743 回答