Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysql:como salvar ORDER BY após LEFT JOIN sem reordenar?


(Explicando a perda de ORDER BY )

O padrão SQL essencialmente diz que uma subconsulta é um conjunto não ordenado de linhas. Isso implica que o Optimizer é livre para ignorar o ORDER BY na tabela 'derivada':FROM ( SELECT ... ORDER BY ) . Nas versões "recentes" do MySQL e do MariaDB, como ORDER BYs estão sendo descartados. Existem outros casos em que ORDER BY é ignorado.

Em algumas situações (não tenho certeza sobre este), adicionando um LIMIT 99999999 (número grande) após o ORDER BY engana o Otimizador para fazer o ORDER BY . No entanto, ainda é livre para ignorar a "ordem" mais tarde.

Uma regra geral para MySQL:Evite subconsultas. (Há casos em que as subconsultas são mais rápidas, mas não as suas.)

Uma regra forte:você deve tem um ORDER BY no mais externo se você quiser que os resultados sejam classificados.

Se você adicionou LIMIT 3 para a tabela derivada em sua primeira consulta, você obteria apenas CHARLES, DAVID, JAMES, mas não necessariamente nessa ordem . Ou seja, você precisaria de dois ORDER BYs - um na tabela derivada, um no final.