Leave only first 50 records in SQL database and de

2019-02-18 01:59发布

问题:

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;