2013-07-25 9 views
12

Ich weiß, in DB2 (mit Version 9.7) kann ich die ersten 10 Zeilen einer Tabelle auswählen, indem Sie diese Abfrage mit:Abrufen von Zeilen in DB2

SELECT * 
FROM myTable 
ORDER BY id 
FETCH FIRST 10 ROWS ONLY 

Aber wie kann ich zum Beispiel Zeilen 11 bis 20? Ich kann den Primärschlüssel oder die ID nicht verwenden, um mir zu helfen ...

Vielen Dank im Voraus!

+0

Ohne den ausdrücklichen Auftrag http://victorsergienko.com/db2-supports-limit-and-offset/ geschrieben ist keine Garantie, dass Sie holen Sie immer die gleichen 10 Zeilen. Sie müssen Ihrer Abfrage 'ORDER BY' hinzufügen. – mustaccio

+0

Sie haben Recht. Ich habe gerade meine Anfrage aktualisiert. Danke, dass du das unterstrichen hast! –

Antwort

11

Hier ist eine Beispielabfrage, die Zeilen aus einer Tabelle enthalten Zustandsnamen, Abkürzungen bekommen, usw.

SELECT * 
FROM (
    SELECT stabr, stname, ROW_NUMBER() OVER(ORDER BY stname) AS rownumber 
    FROM states 
    WHERE stcnab = 'US' 
) AS xxx 
WHERE rownumber BETWEEN 11 AND 20 ORDER BY stname 

Edit: ORDER BY ist notwendig, um sicherzustellen, dass die Reihennummerierung zwischen den Ausführungen der im Einklang Abfrage.

+0

Ja, es hat seinen Zweck erfüllt. Vielen Dank! –

1

Sie können auch die MYSQL-Kompatibilität verwenden. Sie müssen nur die Vektorkompatibilität für MYS aktivieren und dann in Ihren Abfragen Limit und Offset verwenden.

db2set DB2_COMPATIBILITY_VECTOR=MYS 
db2stop 
db2start