Usando rownum no Oracle Instrução SQL em combinação com a cláusula order by
Qual das duas instruções SQL a seguir retornará o conjunto de resultados desejado? (isto é, as dez linhas com Status = 0 e os mais altos StartTimes)?
Ambas as declarações sempre retornarão o mesmo conjunto de resultados (StartTime é único)?
<code>SELECT * FROM MyTable WHERE Status=0 AND ROWNUM <= 10 ORDER BY StartTime DESC SELECT * FROM ( SELECT * FROM MyTable WHERE Status=0 ORDER BY StartTime DESC ) WHERE ROWNUM <= 10 </code>
fundo
Meu DBAdmin me disse que a primeira declaração seráprimeiro limite a tabela a 10 linhas e depois ordene aquelas linhas aleatórias por StartTime, o que definitivamente não é o que eu quero. Pelo que aprendi emessa resposta, a cláusula order by da segunda instrução é redundante e pode ser removida por um otimizador, que também não é o que eu quero.
Eu pedi umpergunta semelhante concerindo olimit
cláusula em uma consulta a um banco de dados SQLite e estou interessado em entender quaisquer diferenças para as declarações acima (usandolimit
Vsrownum
) usado com um oracle db.