2013-07-25 35 views
12

Tôi biết trong DB2 (sử dụng phiên bản 9,7) Tôi có thể chọn 10 dòng đầu tiên của một bảng bằng cách sử dụng truy vấn này:hàng lấy trong DB2

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

Nhưng làm thế nào tôi có thể nhận được, ví dụ, hàng 11 tới 20? Tôi không thể sử dụng khóa chính hoặc ID để giúp tôi ...

Cảm ơn trước!

+0

Nếu không có trình tự rõ ràng không có đảm bảo rằng bạn sẽ lấy 10 hàng giống nhau mỗi lần. Bạn cần thêm 'ORDER BY' vào truy vấn của mình. – mustaccio

+0

Bạn nói đúng. Tôi vừa cập nhật truy vấn của mình. Cảm ơn bạn đã chỉ ra điều này! –

Trả lời

11

Dưới đây là một truy vấn mẫu mà sẽ nhận được hàng từ một bảng chứa tên bang, tên viết tắt, vv

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 là cần thiết để đảm bảo rằng việc đánh số hàng là phù hợp giữa hành của truy vấn.

+0

Có, nó đã làm công việc. Cảm ơn! –

1

Bạn cũng có thể sử dụng tính tương thích MYSQL. Bạn chỉ cần kích hoạt tính tương thích vectơ cho MYS, và sau đó sử dụng Limit và Offset trong các truy vấn của bạn.

db2set DB2_COMPATIBILITY_VECTOR=MYS 
db2stop 
db2start 
Các vấn đề liên quan