Używanie rownum w instrukcji SQL oracle w połączeniu z klauzulą porządkową
Które z poniższych dwóch instrukcji SQL zwróci żądany zestaw wyników (tj. dziesięć wierszy o statusie = 0 i najwyższych czasach rozpoczęcia)?
Czy obie instrukcje zawsze zwracają ten sam zestaw wyników (Czas rozpoczęcia jest wyjątkowy)?
<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>
tło
Mój DBAdmin powiedział mi, że pierwsze oświadczenie będziepierwszy ogranicz tabelę do 10 wierszy i uporządkuj losowe wiersze według StartTime, co zdecydowanie nie jest tym, czego chcę. Z tego, czego się nauczyłemta odpowiedź, klauzula order by drugiej instrukcji jest zbędna i może zostać usunięta przez optymalizator, co również nie jest tym, czego chcę.
Zapytałem apodobne pytanie łączenielimit
klauzula w zapytaniu do bazy danych SQLite i jestem zainteresowany zrozumieniem wszelkich różnic w stosunku do powyższych stwierdzeń (przy użyciulimit
Vsrownum
) używane z db oracle.