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

Ordine Oracle SQL per problemi di sottoquery!

Sia dcw che Dems hanno fornito query alternative appropriate. Volevo solo fornire una spiegazione del motivo per cui la tua query non si sta comportando come ti aspettavi.

Se hai una query che include un ROWNUM e un ORDER BY, Oracle applica prima il ROWNUM e poi ORDER BY. Quindi la domanda

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

ottiene 5 righe arbitrarie da EMP tavolo e li ordina-- quasi certamente non quello che era previsto. Se vuoi ottenere le "prime N" righe usando ROWNUM, dovrai annidare la query. Questa domanda

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

ordina le righe nella tabella EMP e restituisce le prime 5.