所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。
1、在inner join后,如何分页。
http://bbs.csdn.net/topics/390617884
sqlserver 对一张表进行分页查询,但是还要通过第二张表获取信息:
-
--比如有一张表
-
create
table Student
-
(
-
sid
int primary
key
identity(
1,
1) ,
-
sname
varchar(
15)
not
null
-
)
-
-
--第二张表
-
create
table
Comment
-
(
-
id
int primary
key
identity(
1,
1) ,
-
sid
int
not
null
-
)
我需要对第二张表comment 进行分页查询,但是还要通过第一张表查询姓名
要改如何写sql代码。
我用内连接后接下来该如何做。
我的解法:
-
declare @page_size
int;
-
declare @page_num
int;
-
-
--比如:每页10条记录
-
set @page_size =
10;
-
-
--比如:先取第1页
-
set @page_num =
1;
-
-
select
id,
sid,sname
-
from
-
(
-
select c.id,
-
c.sid,
-
s.sname,
-
-
--这里按照@@servername来排序,
-
--你可以根据需要按照id,sid,sname等字段来排序
-
(row_number()
over(
order
by @@servername) -
1) / @page_size
as
rownum
-
from commet c
-
inner
join student s
-
on c.sid = s.sid
-
)t
-
where
rownum = @page_num -
1
由于没有实验数据,下面通过sys.objects来实现:
-
declare @page_size
int;
-
declare @page_num
int;
-
-
--比如:每页10条记录
-
set @page_size =
10;
-
-
--比如:先取第1页
-
set @page_num =
1;
-
-
select *
-
from
-
(
-
select *,
-
row_number()
over(
order
by @@servername)
as
rownum,
-
--这里按照@@servername来排序,
-
--你可以根据需要按照id,sid,sname等字段来排序
-
(row_number()
over(
order
by @@servername) -
1) / @page_size
as pagenum
-
from sys.objects
-
)t
-
where pagenum = @page_num -
1
-
--适用于sql server 2012
-
--也就是 从哪个offset开始,取后面的多少行
-
select *
-
from sys.objects
-
order
by @@servername
-
offset (@page_num -
1)*@page_size
rows
-
fetch
next @page_size
rows
only