问题
I have a table of scores, which is made of 2 fields: name and high score. Something like this:
-----------------------
| name | score |
-----------------------
| John | 2450 |
-----------------------
| Alice | 2420 |
-----------------------
... etc
I need to delete all the rows till the top 50 scores.
Is it possible without creating another temporary table ?
回答1:
please try this
delete from scores_tbl Where
id not in
(select * from
(select id from scores_tbl order by score desc limit 50)
as temp)
回答2:
Create an auto increment field
alter table scores add id int unique auto_increment not null;
This will automatically number your rows in the order of a select query without conditions or order-by
select * scores;
delete from scores where id > 50;
Finally, remove that field
alter table scores drop id;
回答3:
You need a unique field for this , so either alter the table before and after the delete.
Like : alter table scores add id int unique auto_increment not null;
delete from scores where id > 50;
alter table drop column id;
来源:https://stackoverflow.com/questions/21255578/leave-only-first-50-records-in-sql-database-and-delete-the-rest