mySQL kann zwar fast nichts, aber was mir sehr gut gefällt ist, dass man auf jede beliebige SQL Abfrage auf die Ergebnismenge mit LIMIT eine Einschränkung machen kann, also beispielsweise „gib mir die Treffer 200-250“. Sowas kann man bei Webprogrammen ja recht häufig brauchen.
Ich erinnere mich dass ich bei der Arbeit sowas auf Oracle machen musste und es nicht hinbekommen habe, da gabs zwar irgendwas mit ROWID oder ROWNUM (weiss nimmer genau) aber das hatte irgendwie nicht immer funktioniert wenn eine Sortierung vorgenommen wurde.
Deswegen meine Frage, gibt es Wege genau das mySQL LIMIT Verhalten nachzubilden? Mich interessieren dabei insbesondere Queries die auf dem MS SQL Server funktionieren, Oracle bedingt auch.
Und falls nicht, wie wird sowas gelöst programmtechnisch? Mal zig Einträge einlesen und ignorieren kanns ja auch wohl irgnedwie nicht sein!?
ich habe bis heute nicht verstanden, wieso diese Abfrageform sinnvoll sein soll. Meiner Meinung nach ist SQL als mengenorientierte Sprache nicht für solche Einschränken gedacht. Auch habe ich bisher noch kein relevantes Praxisbeispiel gehört.
Dennoch meine Antwort (für Oracle) :
SELECT spalte_A, spalte_B, spalte_C
FROM (SELECT ROWNUM, spalte_A, spalte_B, spalte_C
FROM tabelle)
WHERE ROWNUM BETWEEN 200 AND 250
/
Gruß der Janus
PS: Oracle 9i hat einen eigenen Befehl dafür, den kenne ich aber noch nicht.
ich habe bis heute nicht verstanden, wieso diese Abfrageform
sinnvoll sein soll. Meiner Meinung nach ist SQL als
mengenorientierte Sprache nicht für solche Einschränken
gedacht. Auch habe ich bisher noch kein relevantes
Praxisbeispiel gehört.
Ich brauche das ständig… wenn du z.B. eine Trefferliste realisierst mit mehreren Seiten oder ein Forum im Internet… wenn ich jetzt pro Seite 10 Treffer habe und will Seite 10 sehen, dann brauch ich die Ergebnisse 91-100 der gesamten Abfrage und das unabhängig von irgendeiner Sortierung, das soll auf jedes mögliche Sortierkriterium möglich sein.
Dennoch meine Antwort (für Oracle) :
SELECT spalte_A, spalte_B, spalte_C
FROM (SELECT ROWNUM, spalte_A, spalte_B, spalte_C
FROM tabelle)
WHERE ROWNUM BETWEEN 200 AND 250
Werde ich mal bei Gelegenheit ausprobieren aber cih glaube genau so hatte ich es gemacht und wenn ich noch ein ORDER BY drinhabe, dann geht es nicht mehr, soviel ich mich an die FAQs die ich damals durchwühlt habe, erinnere.
Unter MSSQL gibt es die TOP X Klausel
Z.B. Select TOP 100 * from scott…emp
Probiers mal !
Gruß
Dieter
Hallo,
…
Deswegen meine Frage, gibt es Wege genau das mySQL LIMIT
Verhalten nachzubilden? Mich interessieren dabei insbesondere
Queries die auf dem MS SQL Server funktionieren, Oracle
bedingt auch.
…
danke, das kannte ich leider schon. Das große Problem dabei ist nur, dass man dabei keinen Offset angeben kann und es damit relativ witzlos ist… Habe nun einige Ansätze gesehen die es mit zwei solchen TOPs und verschiedengerichteten Sortierungen machen… dann gibts auch Ansätze mit Prozeduren auf Cursors. Ich schau es mir mal an, es gibt wohl keinen so simplen Weg wie in mySQL.
Gruß
Bruno
Hallo !
Unter MSSQL gibt es die TOP X Klausel
Z.B. Select TOP 100 * from scott…emp