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

wähle rownum vom Gehalt, wobei rownum=3;

Oracle weist ROWNUM sequentiell Werte zu, wenn Zeilen von der Abfrage erzeugt werden - daher erhält die erste abgerufene Zeile ROWNUM=1, die zweite abgerufene Zeile ROWNUM=2, die dritte abgerufene Zeile ROWNUM=3 usw. Beachten Sie - für eine Zeile um ROWNUM=3 zugewiesen zu werden, MÜSSEN zwei vorhergehende Zeilen geholt werden. Und deshalb gibt Ihre Abfrage keine Zeilen zurück. Sie fragen die Datenbank nach der dritten abgerufenen Zeile - aber die Zeilen 1 und 2 wurden nie abgerufen.

Versuchen Sie zur Demonstration, die folgenden Abfragen auszuführen:

SELECT S.* FROM SALARY S;          -- Should return all rows
SELECT ROWNUM, S.* FROM SALARY S;  -- Should return all rows with ROWNUM prepended
SELECT ROWNUM, S.* FROM SALARY WHERE ROWNUM=3;  -- Should return no rows

Versuchen Sie Folgendes, um Ihr Problem zu umgehen:

SELECT ROW_NUMBER FROM
  (SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)
  WHERE ROW_NUMBER = 3;

Teilen und genießen.