Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Probleme mit der Oracle SQL-Reihenfolge in Unterabfragen!

Sowohl dcw als auch Dems haben entsprechende alternative Abfragen bereitgestellt. Ich wollte nur erklären, warum sich Ihre Abfrage nicht so verhält, wie Sie es erwartet haben.

Wenn Sie eine Abfrage haben, die eine ROWNUM und eine ORDER BY enthält, wendet Oracle zuerst die ROWNUM und dann die ORDER BY an. Also die Abfrage

SELECT *
  FROM emp
 WHERE rownum <= 5
 ORDER BY empno

erhält beliebige 5 Zeilen aus dem EMP Tabelle und sortiert sie - mit ziemlicher Sicherheit nicht das, was beabsichtigt war. Wenn Sie die "ersten N" Zeilen mit ROWNUM erhalten möchten, müssen Sie die Abfrage verschachteln. Diese Abfrage

SELECT *
  FROM (SELECT *
          FROM emp
         ORDER BY empno)
 WHERE rownum <= 5

sortiert die Zeilen in der EMP-Tabelle und gibt die ersten 5 zurück.