Sto usando un'applicazione (MapServer - http://mapserver.org/ ) che avvolge le istruzioni SQL, in modo che l'istruzione ORDER BY sia nella query interna. Per esempio
SELECT * FROM (
SELECT ID, GEOM, Name
FROM t
ORDER BY Name
) as tbl
L'applicazione ha molti driver di database diversi. Uso principalmente il driver MS SQL Server e SQL Server 2008. Questo genera un errore se viene trovato un ORDER BY in una sottoquery.
Da MS Docs (anche se questo è per SQL Server 2000 sembra ancora applicarsi):
Quando si utilizza una clausola ORDER BY in una vista, una funzione incorporata, una tabella derivata o una sottoquery, non garantisce l'output ordinato. Invece, la clausola ORDER BY viene utilizzata solo per garantire che il set di risultati generato dall'operatore Top abbia una composizione coerente. La clausola ORDER BY garantisce un set di risultati ordinato solo quando è specificato nell'istruzione SELECT più esterna.
Tuttavia lo stesso tipo di query quando eseguito in Postgres (9) e Oracle restituisce risultati - con l'ordine come definito nella sottoquery. In Postgres il piano di query mostra che i risultati sono ordinati e le note di rilascio di Postgres includono l'articolo che implica che vengano utilizzati gli ordini di subquery:
Evita l'ordinamento quando la subquery ORDER BY corrisponde alla query superiore
http://en.wikipedia.org/wiki/Order_by afferma:
Sebbene alcuni sistemi di database consentano la specifica di una clausola ORDER BY nelle sottoselezioni o visualizzano le definizioni, la presenza non ha alcun effetto.
Tuttavia dal mio controllo dei piani di query:
- SQL Server 2008 non supporta ORDER BY in una sottoquery
- Postgres 9 supporta ORDER BY in una sottoquery
- Oracle 10g supporta ORDER BY in una sottoquery
Quindi la mia domanda ci sono collegamenti che possono confermare o negare ufficialmente che Postgres e Oracle non consentono l'ordinamento in una sottoquery?
ORDER BY
la subquery come ridondanti e non farebbero l'ordinamento non necessario.