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

mysql:jak zapisać ORDER BY po LEFT JOIN bez zmiany kolejności?

(Wyjaśnienie utraty ORDER BYs )

Standard SQL zasadniczo mówi, że podzapytanie jest nieuporządkowanym zestawem wierszy. Oznacza to, że Optymalizator może zignorować ORDER BYs w tabeli „pochodnej”:FROM ( SELECT ... ORDER BY ) . W „najnowszych” wersjach MySQL i MariaDB, takie jak ORDER BYs są odrzucane. Istnieją inne przypadki, w których ORDER BYs jest ignorowany.

W niektórych sytuacje (nie jestem pewien co do tego), dodając LIMIT 99999999 (duża liczba) po ORDER BYs nakłania Optymalizatora do wykonania ORDER BYs . Jednak nadal można zignorować „zamówienie” później.

Ogólna zasada dla MySQL:Unikaj podzapytań. (Są przypadki, w których podzapytania są szybsze, ale nie Twoje).

Silna zasada:musisz mieć ORDER BYs na zewnętrznej stronie, jeśli chcesz, aby wyniki były sortowane.

Jeśli dodałeś LIMIT 3 do tabeli pochodnej w pierwszym zapytaniu otrzymasz tylko CHARLES, DAVID, JAMES, ale niekoniecznie w tej kolejności . Oznacza to, że potrzebujesz dwóch ORDER BYs - jeden w tabeli pochodnej, jeden na samym końcu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. UNIX_TIMESTAMP() Przykłady – MySQL

  2. SQL, który zawiera listę wszystkich urodzin w ciągu następnych i poprzednich 14 dni

  3. Zend_Db:Jak połączyć się z bazą danych MySQL przez tunel SSH?

  4. Czy MySQL może używać wielu indeksów dla jednego zapytania?

  5. MySQL-GRUPA i LICZBA według daty