sql >> Databasteknik >  >> RDS >> Oracle

välj rownum från lön där rownum=3;

Oracle tilldelar värden till ROWNUM sekventiellt allteftersom rader produceras av frågan - alltså får den första raden som hämtas ROWNUM=1, den andra raden som hämtas får ROWNUM=2, den tredje raden som hämtas får ROWNUM=3, etc. Observera - för en rad för att tilldelas ROWNUM=3 MÅSTE två föregående rader hämtas. Och det är därför din fråga inte returnerar några rader. Du frågar databasen om den tredje raden hämtas - men raderna 1 och 2 har aldrig hämtats.

För att demonstrera, prova att köra följande frågor:

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

För att kringgå ditt problem, försök följande:

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

Dela och njut.



  1. De bästa PostgreSQL-säkerhetshoten

  2. PostgreSQL Connection Pooling:Del 3 – Pgpool-II

  3. Hur man ersätter en Intermediate MySQL eller MariaDB Master med en Binlog Server med MaxScale

  4. Varför oracle IN-klausul har en gräns på 1000 endast för statisk data?