Also ich habe beide Lösungen mit Oracle 10g getestet und beide funktionieren, wobei ich bei Irians noch das '<' durch '>' ersetzen musste, da sonst der fünftkleinste Wert, statt des fünftgrößten ausgegeben wurde. ^^
Und dead_orcs Code (edit: so wie Gekigangers) wird aus dem Grund nicht funktionieren, weil ROWNUM in dem Kontext nicht auf Gleichheit geprüft werden kann, steht auch in dem Oracle-Link, den er gepostet hat.
Deine ist weder die performanteste noch die Korrekte, da sie überhaupt keinen Wert zurückliefert
...
Das ist, kurz gesagt, Unsinn. Natürlich habe mein Query getestet und das Ergebnis war völlig korrekt. Du argumentierst also quasi an der Realität vorbei...
Zitat
Das kann schonmal nicht funktionieren, weil zuerst die inneren Abfragen bearbeitet werden und was soll denn da rauskommen, da er in der inneren auch die äußere benötigt, die noch nicht existiert?
...
Du solltest dein Wissen über SQL bitte nochmal etwas aufbessern, bevor du solche Beinahe-Wahrheiten verkündest. Anders gesagt: Du irrst dich. Such mal nach "correlated subquery".
Zitat
Also ich habe beide Lösungen mit Oracle 10g getestet und beide funktionieren, wobei ich bei Irians noch das '<' durch '>' ersetzen musste, da sonst der fünftkleinste Wert, statt des fünftgrößten ausgegeben wurde. ^^
...
Groß... Klein... Details! Anders gesagt: Ups, stimmt natürlich :-)
Zitat
Dubletten entfernen nicht vergessen.
...
Hier sehe ich sogar einen Vorteil meines Ansatzes, der würde ALLE Zeilen ausgeben, die den fünftgrößten Wert beinhalten. Praktisch :-)
(Edit: Ginge natürlich andersrum auch, einfach höchsten Wert suchen und dann alle Zeilen damit ausgeben, vermutlich sogar schneller... Wie gesagt, dieses innere Query hier dürfte kaum die schnellste Lösung sein, da müßte man sich die Logs mal anschauen).
Geändert von Irian (21.11.2009 um 16:51 Uhr)
Grund: Typo gefixt
Das ist, kurz gesagt, Unsinn. Natürlich habe mein Query getestet und das Ergebnis war völlig korrekt. Du argumentierst also quasi an der Realität vorbei...
...
aha. Dann redet der SQL Developer von Oracle an der Realität vorbei?
Ich sage hier nur, was ich hier sehe und rownum hat den Wert 52, bei der Zeile, die ich ausgeben will.
Zeig deinen Code und ich zeige dir wo dein Fehler ist.
...
Das ist jetzt die Innere. Wenn ich jetzt select *, rownum schreibe, meldet er sofort einen Fehler.
Die äußere kann ich machen, was ich will. Nach den Methoden, die hier beschrieben werden, bekomm ich ebenfalls einen Fehler. Ansonsten ist und bleibt rownum = 52.
edit:
Nach deiner Methode
gibt er nicht mal ein ein Ergebnis aus.
Ausserdem frag ich mich die ganze Zeit, was SQL großartig mit Webentwicklung zu tun hat.
Sicherlich werden die Daten in eine SQL Tabelle gespeichert aber es gibt noch andere Anwendungsbereiche für SQL ausser Webentwicklung.