首页 文章

MySQL#1093 - 您可以't specify target table ' giveaways'在FROM子句中进行更新

提问于
浏览
26

我试过了:

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

但它给出了:

#1093 - 您无法在FROM子句中为更新指定目标表'giveaways'

This article似乎相关但我不能适应我的查询 . 我怎样才能让它发挥作用?

6 回答

  • 28

    这是因为您的更新可能是周期性的...如果更新该记录会导致某些事情发生,导致 WHERE 条件 FALSE ?你知道那不是't the case, but the engine doesn' . 在操作中桌面上也可能存在相反的锁定 .

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

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

    Read more

  • 0

    基于您链接到此文章的文章中的信息应该有效:

    update giveaways set winner='1'
    where Id = (select Id from (select max(Id) as id from giveaways) as t)
    
  • 0
    update giveaways set winner=1 
    where Id = (select*from (select max(Id)from giveaways)as t)
    
  • 37
    create table GIVEAWAYS_NEW as(select*from giveaways);
    
    update giveaways set winner=1
    where Id=(select max(Id)from GIVEAWAYS_NEW);
    
  • 13

    利用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;
    
  • 0

    您可以先创建子查询的视图,然后从视图中选择更新/删除 . 只需记住删除视图 .

相关问题