我有一个数据库,其中包含 CMS 驱动网站的所有内容更新。我想创建一个查询来清除所有旧内容,但将每页的最新几 (5) 个副本留给我(以防万一)。该表包含一个 TIMESTAMP 字段和一个 PAGE ID 字段来帮助我找到正确的行。 PrimaryKey 是一个名为 RevisionId 的字段。当然还有其他字段(例如包含页面内容),但它们与本题无关。
我有这个查询工作正常:
SELECT RevisionId
FROM `content`
WHERE PageId='55'
ORDER BY Timestamp DESC LIMIT 5;
它返回五个我希望保存的条目。
我以为我可以这样嵌套它:
DELETE
FROM `content`
WHERE PageId='55'
AND RevisionId NOT IN (
SELECT RevisionId
FROM `content`
WHERE PageId='55'
ORDER BY Timestamp DESC LIMIT 5 );
...但这给了我一个错误:
#1235 - 此版本的 MySQL 尚不支持 'LIMIT & IN/ALL/ANY/SOME subquery'
我正在运行 MySQL 5。
两部分问题:
- 我需要做什么来解决目前遇到的错误?
- 有没有办法进一步自动化它来运行我的 整个表...不仅仅是 PageId='55' 但所有不同的 PageId 编号?
最佳答案
目前mysql不能处理对同一张表有子查询的delete语句。您需要创建临时表以获取最新行的列表,然后在子查询中使用它。
关于mysql - MySql中基于时间戳的嵌套删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6092966/