43

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

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”进行更新

4

2 回答 2

119

以这种方式尝试

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);
于 2011-04-28T10:04:44.800 回答
30

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

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

于 2017-01-19T22:00:08.730 回答