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)?
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
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.