- Einige Varianten
- Nur in Kombination mit
fetch firstoder ähnlichen Klauseln - Wird weg optimiert, wenn bedeutungslos
Diese optionale SQL-Funktion deckt die Order By-Klausel in Unterabfragen ab:
SELECT c
FROM (SELECT *
FROM (VALUES (1), (2)) t(c)
ORDER BY c
FETCH FIRST 1 ROW ONLY
) t2Beachte, dass der einzige Grund für eine Order By-Klausel in Unterabfragen darin besteht, eine Reihenfolge für die Offset- und Fetch First-Klauseln festzulegen – oder ähnliche nicht-standard Klauseln wie limit und top.
Varianten
Bei der Order By-Klausel kann man die folgenden Schlüsseltypen unterscheiden: ⓵ Spaltennamen der Select-Klausel; ⓶ Spaltennamen der From-Klausel0 und ⓷ Ausdrücke, die mindestens einen solchen Spaltennamen enthalten.1 Positionsnummern mittels positiver Ganzzahl ⓸ sind nicht mehr standard SQL. Obwohl der Standard Order By in Unterabfragen auch ohne offset oder fetch first erlaubt, gib es Systeme die so eine (sinnlose) Order By-Klausel nicht akzeptieren ⓹.
- Ausdrücke dürfen keine
Select-Namen enthalten:select c AS x FROM (VALUES (1), (2)) t(c) ORDER BY x - Auch als Bind-Parameter:
order by ?• Negative Parameter (nicht aber Literale) kehren die Reihenfolge um - Auch als Bind-Parameter:
order by ? - Zumutbar; Wird in den anderen Charts ignoriert
SQL Server erlaubt keine sinnlosen Order By-Klausen in Unterabfragen. MariaDB optimiert solche einfach weg – dieses Verhalten ist auch standard-konform, da die Reihenfolge von Unterabfragen in der äußeren Abfrage nicht erhalten bleibt.2
Siehe Auch
Artikel
Standard-Funktionen
Pflicht-Funktionen
Optionale Funktionen
Normative Referenzen
F851, „ORDER BY in subqueries“ ist eine optionale Funktion in ISO/IEC 9075-2:2023. Sie erschien erstmals in der Ausgabe von 2008.

