mysql - 删除所有行并保留最新的 x left

标签 mysql sql-delete

我有一张像这样的 table

entryid,  roomid
 1           1      
 2          55
 3           1
 4          12
 5           1
 6          44
 7           1
 8           3
 9           1

现在我想删除 roomid = 1 的所有条目并保留 剩下 roomid = 1 的最新 3 个(最好只用一个命令)

最后,entryid: 1 和 3 被删除,entryid 6, 7, 9 继续保留(确保所有其他 roomid 仍会保留)

编辑: 感谢帮助。下面我添加了我自己的解决方案,供大家感兴趣

我启动了 new Question如何将其带入一个命令中。你可以在那里帮助我。

最佳答案

DELETE 支持 ORDER BYLIMIT 子句,因此这是可能的。但是,由于 DELETE 的引用限制和 LIMIT 参数,您需要两个查询。

SELECT COUNT(*) AS total FROM table  WHERE roomid = 1;
-- run only if count is > 3
DELETE FROM table WHERE roomid = 1 LIMIT total - 3;

请注意,这可能需要中介技术。我已经显示了查询以供引用。

关于mysql - 删除所有行并保留最新的 x left,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3312531/

相关文章:

php - 如何获取图像并将其显示在下一页?

mysql - 在存储过程中更新和删除

如果条目是数字,PHP 仅删除行

zend-framework2 - 如何在 Zend2 的删除查询中使用 limit 和 order by

java - 设置和检索从mysql到java的自动增量值(在jlabel中设置)

php - 如何在 PHP 中使用 MaxMind GeoIP?

mysql - Laravel Eloquent关系查询获取所有字段数据

c# - 使用 HQL 语句按 ID 列表删除多条记录

mysql - MySql中基于时间戳的嵌套删除

mysql - 使用 join、distinct、count 和 where 的复杂 SQL 请求