My idea is to take records from database for every page with queries like:
page 1:
Code:
SELECT *
FROM
(
SELECT * FROM
BFWBBBKS b
left outer join BFWBBCLS c on b.COLID=c.COLID
left outer join BFWBBCLA ca on ca.COLADRID=b.COLADRID
left outer join BFWBBCTP ct on ct.CARTPID = b.CARTPID
left outer join BFWBBCAR car on car.CARID =b.CARID
left outer join BFWBBSTS bs on bs.BOOKSTSID = b.BOOKSTSID
left outer join BFWBBUSR cu on CAST(b.CRTUSRID AS INTEGER) = cu.WBBUSERID
left outer join BFWBBUSR uu on CAST(b.UPDBUSRID AS INTEGER) = uu.WBBUSERID
order by b.WBBBOOKID
FETCH FIRST 20 ROWS ONLY
) AS bo
order by WBBBOOKID desc
FETCH FIRST 20 ROWS ONLY
page 2:
Code:
SELECT *
FROM
(
SELECT * FROM
BFWBBBKS b
left outer join BFWBBCLS c on b.COLID=c.COLID
left outer join BFWBBCLA ca on ca.COLADRID=b.COLADRID
left outer join BFWBBCTP ct on ct.CARTPID = b.CARTPID
left outer join BFWBBCAR car on car.CARID =b.CARID
left outer join BFWBBSTS bs on bs.BOOKSTSID = b.BOOKSTSID
left outer join BFWBBUSR cu on CAST(b.CRTUSRID AS INTEGER) = cu.WBBUSERID
left outer join BFWBBUSR uu on CAST(b.UPDBUSRID AS INTEGER) = uu.WBBUSERID
order by b.WBBBOOKID
FETCH FIRST 40 ROWS ONLY
) AS bo
order by WBBBOOKID desc
FETCH FIRST 20 ROWS ONLY
page 3:
Code:
SELECT *
FROM
(
SELECT * FROM
BFWBBBKS b
left outer join BFWBBCLS c on b.COLID=c.COLID
left outer join BFWBBCLA ca on ca.COLADRID=b.COLADRID
left outer join BFWBBCTP ct on ct.CARTPID = b.CARTPID
left outer join BFWBBCAR car on car.CARID =b.CARID
left outer join BFWBBSTS bs on bs.BOOKSTSID = b.BOOKSTSID
left outer join BFWBBUSR cu on CAST(b.CRTUSRID AS INTEGER) = cu.WBBUSERID
left outer join BFWBBUSR uu on CAST(b.UPDBUSRID AS INTEGER) = uu.WBBUSERID
order by b.WBBBOOKID
FETCH FIRST 60 ROWS ONLY
) AS bo
order by WBBBOOKID desc
FETCH FIRST 20 ROWS ONLY
and so on...
There are more than 1000 rows.
Arguments for the the part of query FETCH FIRST x ROWS ONLY would be passed from code.
I want to read only the necessary rows.
This solution brings those rows. But what's going on when I'm on the last page?
Code:
SELECT *
FROM
(
SELECT * FROM
BFWBBBKS b
left outer join BFWBBCLS c on b.COLID=c.COLID
left outer join BFWBBCLA ca on ca.COLADRID=b.COLADRID
left outer join BFWBBCTP ct on ct.CARTPID = b.CARTPID
left outer join BFWBBCAR car on car.CARID =b.CARID
left outer join BFWBBSTS bs on bs.BOOKSTSID = b.BOOKSTSID
left outer join BFWBBUSR cu on CAST(b.CRTUSRID AS INTEGER) = cu.WBBUSERID
left outer join BFWBBUSR uu on CAST(b.UPDBUSRID AS INTEGER) = uu.WBBUSERID
order by b.WBBBOOKID
FETCH FIRST 1000 ROWS ONLY
) AS bo
order by WBBBOOKID desc
FETCH FIRST 20 ROWS ONLY
Am I reading all the rows and optimization has no sense? Any better idea?
Thank U for your answer, Dave!
Regards