SQL: nur einen Teil per select erhalten

Squicky

Lt. Commander
Registriert
Sep. 2002
Beiträge
1.422
Hallo

Ich habe eine ganz grosse Tabelle mit über 10.000 Zeilen.

Wie kann ich nur einen Teil der Zeilen per select erhalten?

Mit
select TOP 100 FROM Tabelle
erhalte ich die ersten 100 Zeilen.

Wie lautet der Befehl um die 101-te bis 200-te Zeile zu erhalten?
Bzw. wie lautet der Befehl um die 201-te bis 300-te Zeile zu erhalten?
.......


Ich möchte die Tabelle in angegebenen Teilen erhalten.

Danke
 
Code:
SELECT * FROM Tabelle [B]LIMIT 10, 20[/B];
liefert 20 Zeilen von der 11. Zeile (Zählung beginnt bei 0) an.
 
Wie wird das bei Microsoft SQL gemacht?

LIMIT gibt es nur bei MySQL. Oder?
 
Ein LIMIT wie bei MySQL gibts da nicht. Aber du könntest auch folgendes mal ausprobieren:

Code:
SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 10 * FROM MyTable ORDER BY MyColumn ASC) A ORDER BY MyColumn DESC) B ORDER MyColumn ASC

SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 20 * FROM MyTable ORDER BY MyColumn ASC) A ORDER BY MyColumn DESC) B ORDER MyColumn ASC

SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 30 * FROM MyTable ORDER BY MyColumn ASC) A ORDER BY MyColumn DESC) B ORDER MyColumn ASC

SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 40 * FROM MyTable ORDER BY MyColumn ASC) A ORDER BY MyColumn DESC) B ORDER MyColumn ASC

SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 50 * FROM MyTable ORDER BY MyColumn ASC) A ORDER BY MyColumn DESC) B ORDER MyColumn ASC

Vie Erfolg
Rossibaer

EDIT: Uups, Meolus hat dir das gleiche auch schon geschrieben...
 
Zuletzt bearbeitet:
ich hab mal schnell ein bench gemacht
Code:
SELECT *
FROM (
	SELECT TOP 100 * 
	FROM (
		SELECT TOP 50100 * 
		FROM table 
		ORDER BY ID ASC) A 
	ORDER BY ID DESC) B 
ORDER by ID ASC
hat 7 sek gebraucht und sieht kacke aus ...

Code:
SELECT TOP (100) *
FROM table
WHERE ID NOT IN (
	SELECT TOP (50000) MG_PMID 
	FROM table
	order by ID )
order by ID;
hat 5 sek gebraucht und ist kürzer und sieht daher besser aus
des wegen würde ich 2. lösung dir ans herz legen.
 
Zuletzt bearbeitet:
Leider funktionieren beide Lösungen nicht.
Denn die innere Abfrage ließt mehr wie 1000 Datensätze aus; und dies ist beim auslesen des AD per SQL nicht möglich.
 
dann benutzt du anscheind kein ms sql server ... oder
irgendwas anders hast du vergessen was
der ad im zusammenhang verstehe ich nicht.
 
Was hast du genau vor? Zuerst ging es nur um das stückweise Auslesen einer großen Tabelle. Nun kommt noch AD ins Spiel, was aber wohl kaum die erstmalig genannte Tabelle in der DB ist. Wäre gut mehr Info übers Szenario zu haben. Im übrigen, warum muss es eine SQL-Abfrage sein? Kann es alternativ auch ein T-SQL Block sein oder spezieller eine Stored Procedure/Function? SQLServer kennt keine adäquate Entsprechung für LIMIT x,y. Da wird man wohl kaum ums Programmieren herum kommen. BTW um was für eine MS SQLServer Version handelt es sich?
 
Zurück
Oben