Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy istnieje alternatywa dla IN z LIMIT?

DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5

Ostatnie 5 może być dowolną liczbą. Jeśli uruchomisz to za każdym razem, gdy zostanie dodany wynik, możesz mieć go jako 1 . Aby zezwolić na większy margines błędu, użyj 10 .

EDYCJA:Przepraszamy, najwyraźniej nie możesz tutaj użyć przesunięcia. W takim przypadku:

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

Jeśli to nie pozwala na to (wybierz z tej samej tabeli co aktualizacja/usunięcie), spróbuj:

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

EDYTUJ ponownie:Jak wskazano w komentarzu, powoduje problemy, jeśli 11. wartość jest równa 10. Wypróbuj:

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

Porządkowanie według scoreId w pierwszej zmiennej zapewnia, że ​​gdy jest kilka z tym samym wynikiem, zostanie tam nie mniej niż 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. Powtarzalna praca dla Laravel json api

  2. aplikacja zawiesza się na JSON jparser, aby wykonać żądanie http

  3. czy to blokuje bazę danych?

  4. Wybierz MAX lub Zamów według limitu 1

  5. Jak korzystać z MySQL na Macu?