Mysql
 sql >> база данни >  >> RDS >> Mysql

Има ли алтернатива на IN с LIMIT?

DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5

Последното 5 може да бъде произволно число. Ако стартирате това всеки път, когато се добави резултат, можете да го имате като 1 . За да позволите повече допустима грешка, използвайте 10 .

РЕДАКТИРАНЕ:Съжалявам, очевидно не можете да използвате отместване тук. В такъв случай:

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

Ако не ви позволява да направите това (изберете от същата таблица като актуализация/изтриване), опитайте:

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

РЕДАКТИРАНЕ отново:Както е посочено в коментар, създава проблеми, ако 11-та стойност е равна на 10-та. Опитайте:

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

Подреждането по scoreId в първата променлива гарантира, че когато има няколко с еднакъв резултат, там ще бъдат оставени не по-малко от 10.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не мога да накарам INSERT да работи

  2. SQL помощ | Списъкът за избор за оператора INSERT съдържа по-малко елементи от списъка за вмъкване

  3. Автоматично увеличение във временната таблица

  4. Увеличете стойността в заявката за актуализиране на MySQL

  5. Запазване на данни в mysql от Hive hadoop до sqoop?