Ich verwende eine Anwendung (MapServer - http://mapserver.org/ ), die SQL-Anweisungen umschließt, sodass sich die ORDER BY-Anweisung in der inneren Abfrage befindet. Z.B
SELECT * FROM (
SELECT ID, GEOM, Name
FROM t
ORDER BY Name
) as tbl
Die Anwendung verfügt über viele verschiedene Datenbanktreiber. Ich verwende hauptsächlich den MS SQL Server-Treiber und SQL Server 2008. Dies löst einen Fehler aus, wenn in einer Unterabfrage ein ORDER BY gefunden wird.
Aus den MS Docs (obwohl dies für SQL Server 2000 gilt, scheint es immer noch zu gelten):
Wenn Sie eine ORDER BY-Klausel in einer Ansicht, einer Inline-Funktion, einer abgeleiteten Tabelle oder einer Unterabfrage verwenden, wird keine geordnete Ausgabe garantiert. Stattdessen wird die ORDER BY-Klausel nur verwendet, um sicherzustellen, dass die vom Top-Operator generierte Ergebnismenge eine konsistente Zusammensetzung aufweist. Die ORDER BY-Klausel garantiert eine geordnete Ergebnismenge nur, wenn sie in der äußersten SELECT-Anweisung angegeben ist.
Der gleiche Abfragetyp, der in Postgres (9) und Oracle ausgeführt wird, gibt jedoch Ergebnisse zurück - mit der in der Unterabfrage definierten Reihenfolge. In Postgres zeigt der Abfrageplan, dass die Ergebnisse sortiert sind, und die Postgres-Versionshinweise enthalten den Artikel, der impliziert, dass Unterabfrageaufträge verwendet werden:
Vermeiden Sie das Sortieren, wenn die Unterabfrage ORDER BY mit der oberen Abfrage übereinstimmt
http://en.wikipedia.org/wiki/Order_by heißt es:
Obwohl einige Datenbanksysteme die Angabe einer ORDER BY-Klausel in Unterauswahlen oder Ansichtsdefinitionen zulassen, hat das Vorhandensein dort keine Auswirkung.
Jedoch aus meiner eigenen Überprüfung von Abfrageplänen:
- SQL Server 2008 unterstützt ORDER BY in einer Unterabfrage nicht
- Postgres 9 unterstützt ORDER BY in einer Unterabfrage
- Oracle 10g unterstützt ORDER BY in einer Unterabfrage
Meine Frage, gibt es also Links, die offiziell bestätigen oder leugnen können, dass Postgres und Oracle das Sortieren in einer Unterabfrage nicht zulassen?
ORDER BY
in der Unterabfrage als redundant identifizieren und nicht die unnötige Sortierung durchführen.