2012-02-01 20 views
1

我不能建立一个查询到MySQL,删除行从200到结​​束。如何在条件中使用同一表中的数据有条件地删除表中的行?

DELETE FROM `popular` 
WHERE NOT EXISTS(
SELECT * 
FROM `popular` 
ORDER BY `rank` DESC, `timestamp` DESC 
LIMIT 200 
) 

由于一个错误 - #1093 - 您不能在FROM子句

+0

当我想到,你必须把它翻译成英文。 – theWalker 2012-02-01 17:18:38

+1

我的歉意,但堆栈溢出是一种英语语言资源,因为这样的问题应该翻译成英文,无论是由自己或其他人。 – 2012-02-01 17:18:53

+0

这是SQL实现中很多MySQL缺陷之一。您需要将其更改为使用连接 – 2012-02-01 17:26:39

回答

1

只是把它分成两个调用指定目标表“流行”的更新:首先运行一个选择,找到的的ID你想删除的行。然后复制这些ID并在删除命令中使用它们。

如果你不想手动添加逗号之间的逗号,你可以使用“查找和替换”的文本或Excel中可以做到这一点很容易。

1

您可能需要排名第一行然后将其存储在一个临时表,并确定各行要删除

select @rownum:[email protected]+1 rownum, popular.* from (select @rownum:=0) r, popular order by rank desc, timestamp desc 
相关问题