MySQL删除所有未选中的记录

标签 mysql sql-delete subquery

我正在尝试根据时间戳删除除最近的 25 个条目之外的所有条目。我试过这个:

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'

有没有办法做到这一点?

最佳答案

您不能依赖 IN/ALL/ANY/SOME 子查询中的 LIMIT,而是可以使用多删除语法:

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 开始起作用

关于MySQL删除所有未选中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18511511/

相关文章:

mysql - 使用不同的 where 子句组合两个 mysql 查询

mysql - 如何在子查询中使用 select 的值?

mysql - 获取几年内几个月之间的所有数据

php - MySQL根据月份选择数据并将它们加在一起(最好在ZEND中)

MySQL 错误 1 ​​(HY000) 无法创建文件 Errcode 2

MySQL错误您无法在FROM子句中指定更新目标表

mysql - 只有一个约束的多删除

MySQL 多删除。是否可以多次删除引用的行?

mysql - 返回表中的所有行以及另一个表中特定行的信息

sql - 减去两个子查询