删除 - 我不能指定目标表?

Posted

技术标签:

【中文标题】删除 - 我不能指定目标表?【英文标题】: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”进行更新

【问题讨论】:

【参考方案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% 说得通,谢谢!

以上是关于删除 - 我不能指定目标表?的主要内容,如果未能解决你的问题,请参考以下文章

#1093 - 您不能在 FROM 子句中指定要更新的目标表 [重复]

#1093 - 您不能在 FROM 子句中指定目标表 'comments' 进行更新

sqlserver 删除不能删除查询出来的top值吗?如下 不能执行

无法在mysql中指定更新、删除查询的目标表

SqlBulkCopy 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 bit

无法删除和更新访问链接表上的记录