phpmyadmin SQL仅保留最后X行

z5btuh9x  于 2022-11-09  发布在  PHP
关注(0)|答案(2)|浏览(114)

我有一个表,其中id是不断增加的。Id并不总是以相同的值增加,它不是一个auto_increment,因为一个api,但它永久增加。例如:
| 识别码|其他内容|
| - -|- -|
| 五零一|xxx|
| 500个|年|
| 三六五|qqq|
| 一个人。|一个人。|
现在我只想保留最后的X行,删除id较低的行。我能够找到一个类似的,但不是一个工作的解决方案,为自己这个问题。
我原以为这样做会奏效,但出现了一个错误:

DELETE FROM `games` WHERE `matchId` NOT IN(SELECT `matchId` FROM `games` ORDER BY `matchId` DESC LIMIT X)

1235 -此版本的MySQL尚不支持'LIMIT & IN/ALL/ANY/SOME子查询'

我运行的mysql版本8.0.27上的phpmyadmin 5.1.1的网页界面。

是否有办法保留最新的x行而不触发此错误?

xv8emn3q

xv8emn3q1#

WITH cte AS (
 SELECT id, ROW_NUMBER() OVER (ORDER BY id DESC) AS rownum FROM games
)
DELETE games FROM games JOIN cte USING (id) WHERE rownum > 2;
rur96b6h

rur96b6h2#

您可以改用CTE:

with u as
(select Id from table_name order by Id desc limit 5)
delete from table_name
where Id not in(select Id from u)

相关问题