Oracle
 sql >> Database >  >> RDS >> Oracle

seleziona rownum dallo stipendio dove rownum=3;

Oracle assegna i valori a ROWNUM in sequenza poiché le righe vengono prodotte dalla query, quindi la prima riga recuperata ottiene ROWNUM=1, la seconda riga recuperata ottiene ROWNUM=2, la terza riga recuperata ottiene ROWNUM=3, ecc. Avviso - per una riga da assegnare ROWNUM=3 DEVONO essere recuperate due righe precedenti. Ed è per questo che la tua query non restituisce righe. Stai chiedendo al database la terza riga recuperata, ma le righe 1 e 2 non sono mai state recuperate.

Per dimostrare, prova a eseguire le seguenti query:

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

Per aggirare il tuo problema, prova quanto segue:

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

Condividi e divertiti.