oracle's rownum
pseudocolumn, der häufig für die Ergebnisbeschränkung verwendet wird, stellt eine einzigartige Herausforderung in Kombination mit der Bestellung vor. Im Gegensatz zu MySQLs limit
, die sich nach der Sortierung bezieht, rownum
filters vor die order by
-Klausel wird verarbeitet. Dies bedeutet, dass Sie einfach rownum
eine bestimmte bestellte Teilmenge Ihrer Ergebnisse garantieren.
Der Standardansatz (alle Oracle -Versionen):
um das Äquivalent zu MySQLs limit
Funktionalität zu erreichen, verwenden Sie eine verschachtelte Abfrage:
SELECT *
FROM (
SELECT *
FROM emp
ORDER BY sal DESC
)
WHERE ROWNUM
Dieser Ansatz bestellt zuerst die Daten und wendet dann den rownum
filter an, um sicherzustellen, dass die 5 höchsten Gehälter zurückgegeben werden.
Offss- und Begrenzung der Ergebnisse:
Für eine ausgefeiltere Kontrolle erfordert die Angabe eines Versatzes und einer Grenze eine etwas komplexere Abfrage:
SELECT *
FROM (
SELECT a.*, ROWNUM rnum
FROM (
SELECT * -- Your main query with ORDER BY clause
FROM some_table
ORDER BY some_column
) a
WHERE ROWNUM = :MIN_ROW_TO_FETCH;
ersetzen : max_row_to_fetch
und : min_row_to_fetch
mit deinen gewünschten oberen und unteren Grenzen. Dies holt Zeilen innerhalb eines bestimmten Bereichs nach der Bestellung.
oracle 12c und darüber hinaus: die fetch
klausel:
Oracle 12c (und spätere Versionen) bieten eine elegantere Lösung mit der Fetch
Klausel:
-- Retrieve the first 10 rows
SELECT *
FROM sometable
ORDER BY name
FETCH FIRST 10 ROWS ONLY;
-- Retrieve rows 20-30
SELECT *
FROM sometable
ORDER BY name
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
Die Klausel fetch
bietet eine sauberere und lesbarere Möglichkeit, Ergebnisse zu begrenzen und zu optimieren, was sie zur bevorzugten Methode für Oracle 12c und später macht. Für ältere Versionen bleibt der verschachtelte Abfrageansatz notwendig.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3