所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。
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
在论坛中出现的比较难的sql问题:5(row_number函数 分页、随机返回数据)
原文:https://www.cnblogs.com/lonelyxmas/p/12019980.html