sql >> Database teknologi >  >> RDS >> Mysql

Er der et alternativ til IN med LIMIT?

DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5

Den sidste 5 kan være et hvilket som helst tal. Hvis du kører dette hver gang en score tilføjes, kan du have den som 1 . Brug 10 for at tillade mere fejlmargin .

EDIT:Beklager, tilsyneladende kan du ikke bruge en offset her. I så fald:

DELETE FROM Highscore WHERE value < (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)

Hvis det ikke lader dig gøre det (vælg fra samme tabel som en opdatering/sletning), prøv:

SET @tmp = (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
DELETE FROM Highscore WHERE value < @tmp

EDIT igen:Som påpeget i kommentaren, giver det problemer, hvis 11. værdi er lig med 10. Prøv:

SET @id = (SELECT scoreId FROM Highscore ORDER BY value DESC, scoreId DESC LIMIT 10,1), @val = (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
DELETE FROM Highscore WHERE value <= @val AND scoreId < @id

Ordning efter scoreId i den første variabel sikrer, at når der er flere med samme score, vil der ikke være mindre end 10 der.



  1. Indsæt i MySQL fra R

  2. Hvordan får man antallet af dages forskel mellem to datoer på MySQL?

  3. MySQL tabel PRIMÆR NØGLE spørgsmål?

  4. SQL:Vælg nøgler, der ikke findes i én tabel