(Explicando la pérdida de ORDER BYs
)
El estándar SQL esencialmente dice que una subconsulta es un conjunto desordenado de filas. Esto implica que el Optimizador es libre de ignorar el ORDER BYs
en la tabla 'derivada':FROM ( SELECT ... ORDER BY )
. En versiones "recientes" de MySQL y MariaDB, tales ORDER BYs
se están dejando caer. Hay otros casos en los que ORDER BYs
se ignora.
En algunos situaciones (no estoy seguro de esta), agregando un LIMIT 99999999
(número grande) después de ORDER BYs
engaña al optimizador para que realice el ORDER BYs
. Sin embargo, todavía es libre de ignorar el "pedido" más adelante.
Una regla general para MySQL:Evite las subconsultas. (Hay casos en los que las subconsultas son más rápidas, pero no en el suyo).
Una regla estricta:debes tener un ORDER BYs
en el exterior si desea ordenar los resultados.
Si hubiera agregado LIMIT 3
a la tabla derivada en su primera consulta, obtendría solo CHARLES, DAVID, JAMES, pero no necesariamente en ese orden . Es decir, necesitaría dos ORDER BYs
- uno en la tabla derivada, uno al final.