Estoy usando una aplicación (MapServer - http://mapserver.org/ ) que envuelve las instrucciones SQL, de modo que la instrucción ORDER BY está en la consulta interna. P.ej
SELECT * FROM (
SELECT ID, GEOM, Name
FROM t
ORDER BY Name
) as tbl
La aplicación tiene muchos controladores de bases de datos diferentes. Principalmente uso el controlador MS SQL Server y SQL Server 2008. Esto arroja un error si se encuentra un ORDER BY en una subconsulta.
Desde MS Docs (aunque parece que es para SQL Server 2000, todavía parece aplicarse):
Cuando utiliza una cláusula ORDER BY en una vista, una función en línea, una tabla derivada o una subconsulta, no garantiza la salida ordenada. En cambio, la cláusula ORDER BY solo se usa para garantizar que el conjunto de resultados generado por el operador Top tenga una composición consistente. La cláusula ORDER BY solo garantiza un conjunto de resultados ordenado cuando se especifica en la instrucción SELECT más externa.
Sin embargo, el mismo tipo de consulta cuando se ejecuta en Postgres (9) y Oracle devuelven resultados, con el orden definido en la subconsulta. En Postgres, el plan de consulta muestra que los resultados están ordenados y las notas de la versión de Postgres incluyen el elemento que implica que se utilizan órdenes de subconsulta:
Evite ordenar cuando la subconsulta ORDER BY coincida con la consulta superior
http://en.wikipedia.org/wiki/Order_by dice:
Aunque algunos sistemas de bases de datos permiten la especificación de una cláusula ORDER BY en subselecciones o definiciones de vista, la presencia allí no tiene ningún efecto.
Sin embargo, desde mi propia comprobación de planes de consulta:
- SQL Server 2008 no admite ORDER BY en una subconsulta
- Postgres 9 admite ORDER BY en una subconsulta
- Oracle 10g admite ORDER BY en una subconsulta
Entonces, mi pregunta, ¿hay algún enlace que pueda confirmar o negar oficialmente que Postgres y Oracle no permiten la clasificación en una subconsulta?
ORDER BY
en la subconsulta como redundante y no realizarían la clasificación innecesaria.