sql >> Databasteknik >  >> RDS >> Mysql

Finns det något alternativ till IN med LIMIT?

DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5

Den sista 5 kan vara vilket nummer som helst. Om du kör detta varje gång en poäng läggs till kan du ha den som 1 . För att tillåta större felmarginal, använd 10 .

EDIT:Förlåt, tydligen kan du inte använda en offset här. I så fall:

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

Om det inte låter dig göra det (välj från samma tabell som en uppdatering/ta bort), försök:

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

EDIT igen:Som påpekats i kommentaren, orsakar problem om 11:e värdet är lika med 10:e. Försök:

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örsta variabeln säkerställer att när det finns flera med samma poäng kommer inte mindre än 10 att lämnas där.



  1. Hur överför man pandas DataFrame till Microsoft SQL Server-tabellen?

  2. Fel:Det finns tabellutrymme för tabell xxx. Vänligen KASSA tabellutrymmet före IMPORT

  3. Antal MySQL-anslutningspooler

  4. Visa valda resultat vertikalt i psql, som görs av MySQL:s \G