【问题标题】:Delete - I can't specify target table?删除 - 我不能指定目标表?
【发布时间】:2011-08-14 13:58:12
【问题描述】:

为什么这个查询不起作用?

DELETE FROM recent_edits 
WHERE trackid NOT IN 
     (SELECT DISTINCT history.trackid 
     FROM history JOIN recent_edits ON history.trackid=recent_edits.trackid 
     GROUP BY recent_edits.trackid)

我收到此消息:“您无法在 FROM 子句中指定目标表“recent_edits”进行更新

【问题讨论】:

    标签: mysql mysql-error-1093


    【解决方案1】:

    这样试试

    DELETE FROM recent_edits 
    WHERE trackid NOT IN 
         (select * from (SELECT DISTINCT history.trackid 
         FROM history JOIN recent_edits ON history.trackid=recent_edits.trackid 
         GROUP BY recent_edits.trackid) as t);
    

    【讨论】:

    • @Augusto:很高兴你发现它有用。你的回答也对。 :)
    • 这需要解释一下。
    • 在我的情况下,具有相同表子查询的同一张表对我来说效果很好。谢谢
    • 为我节省了一天。谢谢。
    • @nhaarman 详细解释:xaprb.com/blog/2006/06/23/…
    【解决方案2】:

    您不能对已锁定删除的表进行后处理。正如 Nicola 所说,使用 hack select * from (query) 将生成一个临时表,而不是直接访问。

    编辑 - 确保为您使用的表格提供 ID,因为它是嵌套的,并且每个表格都需要唯一 ID。

    【讨论】:

    • 很好的解释,1000% 说得通,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2016-05-08
    • 2015-07-10
    相关资源
    最近更新 更多