删除 - 我不能指定目标表?
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值吗?如下 不能执行