2013-08-29 150 views
1

我试图删除除最近25个基于时间戳的所有条目。我尝试这样做:MySQL删除所有记录未选中

DELETE FROM `chat` WHERE `IndexNo` NOT IN(SELECT `IndexNo` FROM `chat` ORDER BY `Timestamp` DESC LIMIT 25) 

生成此错误:

#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 

有没有办法做到这一点?

+0

你正在运行哪个MySQL版本? –

+0

除非我非常接触,否则他们正在使用哪个版本并不重要。 – Strawberry

回答

1

你不能依靠LIMITIN/ALL/ANY/SOME子查询,而是可以使用多删除语法:

DELETE 
    `chat` 
FROM 
    `chat` 
    LEFT JOIN (SELECT `IndexNo` FROM `chat` ORDER BY `Timestamp` DESC LIMIT 25) AS `selected` 
     ON `chat`.`IndexNo`=`selected`.`IndexNo` 
WHERE 
    `selected`.`IndexNo` IS NULL; 

- 根据manual,这将因为MySQL 5.0中工作