![]() |
AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"
Zitat:
Und meine Vermutung wäre: Wenn man bereits eine Komponente einsetzt, die nachladen kann, wäre das vielleicht schonender, als die eine Variante mit Limit plus extra Count und oder Group. |
AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"
Zitat:
SQL-Code:
Kann maximal 100 Sätze liefern.
select top 100 * from tabelle where bedingung
SQL-Code:
liefert die Gesamtzahl der Sätze zur Bedingung.
select Count(*) from tabelle where bedingung
Ist diese Zahl > 100, so weiß ich, dass ich mit mehr als 100 Sätzen rechnen muss und kann zum ersten Statement einen entsprechenden Hinweis ausgeben, der besagt, dass es zu den 100 Sätzen noch weitere Zahl - 100 Sätze gibt. Ein Subselect oder eine Gruppierung erscheinen mir nicht erforderlich. Wo liegt mein Denkfehler? Die Ursprungsfrage war doch: Wenn ich per Top 100 die Menge einschränke, wie kann ich erfahren, ob es mehr, weniger oder genau 100 Sätze gibt? Weniger ist klar: Kommt bei Top 100 weniger als 100 heraus, gibt es weniger als 100. Kommen 100 Sätze heraus, so gibt es mindestens 100 Sätze. Das Mehr kann bei 0 bis n liegen. Mit einem Subselect muss man nur dann arbeiten, wenn man bei der Ermittlung der weiteren, möglichen Ergebnismenge, die bereits erhaltene explizit ausklammern will. Für die Feststellung der Größe einer möglichen Ergebnismenge erscheint mir das nicht erforderlich. Gesamtmenge (Count(*)) minus bereits erhaltener Menge (top 100) = Restmenge. Anhand einer Datenmenge von
SQL-Code:
kann ich nicht feststellen, ob es mehr, als die ausgewählte Datenmenge, gibt. Auch durch Count mit oder ohne Gruppierung nicht, ich werde immer mindestens eine weitere Abfrage benötigen.
select top 100 * from tabelle where bedingung
Oder möchtest Du darauf hinaus, dass das Count quasi schon eine Teilmenge des Ergebnisses ist? Also grob sowas in der Art:
SQL-Code:
select top 100 *, GesamtanzahlDesMöglichenErgebnisses from tabelle where bedingung
|
AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"
Zitat:
Code:
Dass es in 2 Abfragen machbar ist, ist klar. Aber Der schöne Günther hat ja nach einer Möglichkeit gefragt wie er es mit einer Abfrage erkennen/lösen kann.
select top 100
*, (select count(*) from tabelle where bedingung) as alle from tabelle where bedingung |
AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"
Mir ist die Aufgabenstellung nicht so ganz klar. Irgendwie klingt das nach ich hab nur 100 EUR aber vielleicht gebe ich noch mehr aus.
So zu denken ist für Menschen ganz normal, die meisten Programm sind nicht so indifferent. Gruß K-H |
AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"
Vielen Dank erst einmal für all die Antworten, das ist alles sehr hilfreich! :thumb:
Zitat:
Wenn dem Benutzer die 100 Treffer nicht reichen muss er genauer suchen 8-) Mehr will ich gar nicht. Das ist ja auch nichts ungewöhnliches, so etwas sieht man ja überall. |
AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"
Falls das DBSM es nicht gut erkennt oder man dieses "immer gleiche" SubSelect nicht in jeder Zeile ausgeführt haben will,
oder man es im HauptSelect nicht drin stehen haben will, dann vielleicht in einen JOIN verschieben. |
AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"
Man könnte es in eine Procedure (Syntax Firebird) verpacken:
create or alter procedure test ( y integer) returns ( anzahl integer; p1 integer usw ) as begin select count(*) from table where f1=:y into anzahl; for select first 100 f1,f2,f3,...fn. from table where f1=:y into :p1,:p2,:p3,.. :pn do suspend; end; Dann hat man in jedem Datensatz die Anzahl wenn man die Procedure mit einer Query abfragt. |
AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"
Dafür ist mein SQL nicht gut genug, ich verstehe kein bisschen. :gruebel:
|
AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"
Zitat:
Grüße |
AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"
Ein
Code:
kann ich mir nicht leisten, die Bedingung ist komplex.
SELECT COUNT(*) where Bedingung
Das dauert so lange dass man sich erst einmal einen Kaffee holen kann. Zumindest wenn in der Datenbank schon ein paar Millionen Datensätze stecken. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz