View Full Version : SQL TOP 500
Nö, ich krieg schon die richtigen Datensätze. Das klappt jetzt alles wunderbar. Vielen dank für Eure schnelle Hilfe.
fetch first 30 rows only ist aber kein vollwertiger Ersatz für limit 0,30
denn ich kann keinen Aufsetzpunkt definieren. Unter Mysql liefert mir Limit 60,30 z.B. 30 Datensätze beginnend mit dem 60. Datensatz. Gibts da eine Entsprechung auf der AS unter 5.2?
Nein, da gibts keinen Ersatz. "Limit" ist eben ein SQL-Dialekt und eigentlich eher unsinnig. Ich würde lieber den SQL entsprechend kodieren, denn warum soll ich mehr lesen lassen als ich benötige ?
Für "TOP x" sehe ich ja noch eine Anwendung.
Hallo,
ab Release V5R4M0 kann man so etwas über OLAP Ranking-Funktionen bewerkstelligen.
Vor Release V5R4M0 muss man sich halt ein entsprechendes SQL-Statement zusammenpfiemeln. Es funktioniert, aber die Performance wird bescheiden sein.
Wie Fuerchau sagt, macht das eigentlich wenig Sinn. Es gibt jedoch Situationen in denen z.B. die Plätze 7-25 ermittelt werden müssen.
Beispiel:
with x as (select * from HsCommon05/adresse
order by KundeNr)
select * from x as z
where 11 < (select count(*) from x where x.KundeNr < z.KundeNr)
and 20 > (select count(*) from x where x.KundeNr < z.KundeNr)
order by KundeNr
Der Sinn ist folgender:
Unter PHP wird über ODBC auf die DB2 zugegriffen und eine HTML-Liste erzeugt.
Da es wenig sinnvoll ist, z.b. 200 Datensätze / Tabellenzeilen zu übertragen (es wird teilweise noch über Modem auf den Webserver zugegriffen) werden die ersten 25 Sätze angezeigt und unten eine Navigation (nächste 25). Mit "Limit x,y" ist so eine Navigation halt kinderleicht zu erstellen.
Bisher hab ich mir die Daten nachts automatisiert auf eine MYSQL-Datenbank gezogen und von dort verwurstelt. Hat auch gut und zuverlässig funktioniert. Nun brauche ich die Daten aber in Echtzeit. Und jetzt quäle ich mich halt mit Zählern und Schleifen.
Da hilft nur ein scrollable Cursor, mit dem man dann auch vor und zurück positionieren kann. Dies ist auf jeden Fall schneller als immer wieder den Select neu durchführen zu lassen und dann auch nur noch ein Teilergebnis auszuwerten dass von Aufruf zu Aufruf auch noch abweichen kann.
Mit Limit belaste ich den Server stärker als mit einem positionierbaren SQL-Cursor (wobei der auch sowohl dynamisch als auch statisch sein kann).