(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.