Verwendung von rownum in einer Oracle SQL-Anweisung in Kombination mit einer order by-Klausel
Welche der folgenden beiden SQL-Anweisungen gibt die gewünschte Ergebnismenge zurück? (d. h. die zehn Zeilen mit Status = 0 und den höchsten Startzeiten)?
Werden beide Anweisungen immer dieselbe Ergebnismenge zurückgeben? (StartTime ist einzigartig)?
<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>
Hintergrund
Mein DBAdmin sagte mir, dass die erste Anweisung wirdzuerst beschränke die Tabelle auf 10 Zeilen und ordne diese zufälligen Zeilen nach StartTime, was definitiv nicht das ist, was ich will. Von dem, was ich gelernt habediese Antwortist die order by-Klausel der zweiten Anweisung überflüssig und könnte von einem Optimierer entfernt werden, was ich auch nicht wünsche.
Ich fragte einähnliche Frage in Bezug auf dielimit
Klausel in einer Abfrage an eine SQLite-Datenbank und bin daran interessiert, etwaige Unterschiede zu den obigen Aussagen zu verstehen (unter Verwendung vonlimit
Vsrownum
) verwendet mit einem Orakel db.