两个表联合分页查询的SQL语句,多谢
两个表联合分页查询的SQL语句,谢谢!
学生 A表: pid,name
课程 B表:pid,class,parentclass
学生会上很比较多的课程class(语文、数学),但学生对class又报了parentclass(譬如基础班、考前班),这样,pid和parentclass就会出现一对多。譬如肖明报了语文的基础班,又报了数学的基础班,如果按照parentclass基础班来进行查询学生的话,就会出现两条肖明的数据。
pid class parentclass
肖明 语文 基础班
肖明 数学 基础班
请教这种情况如何按照parentclass为条件进行分页查询并得出去掉学生重复值的count数。谢谢。
分不多了,谢谢!
------解决思路----------------------
能点第五页,那么你最开始取过总页数了。
不如改成这样:
1)把有序的pid插入有自增行号的临时表
2)从临时表中统计每也的最小、最大pid返回
所有的分页查询都可以统一成下面这样
------解决思路----------------------
select #A.PID,#A.NAME,PARENTCLASS,MAX(CLASS) CLASS from #A JOIN #B on #A.PID=#B.PID
GROUP BY #A.PID,#A.NAME,PARENTCLASS
学生 A表: pid,name
课程 B表:pid,class,parentclass
学生会上很比较多的课程class(语文、数学),但学生对class又报了parentclass(譬如基础班、考前班),这样,pid和parentclass就会出现一对多。譬如肖明报了语文的基础班,又报了数学的基础班,如果按照parentclass基础班来进行查询学生的话,就会出现两条肖明的数据。
pid class parentclass
肖明 语文 基础班
肖明 数学 基础班
请教这种情况如何按照parentclass为条件进行分页查询并得出去掉学生重复值的count数。谢谢。
分不多了,谢谢!
------解决思路----------------------
能点第五页,那么你最开始取过总页数了。
不如改成这样:
1)把有序的pid插入有自增行号的临时表
2)从临时表中统计每也的最小、最大pid返回
所有的分页查询都可以统一成下面这样
select top 10 a.pid,a.name --top 10 其实不需要了
from A表 a
left join B表 b ON a.pid=b.pid
where b.parentclass='基础班'
and a.pid BETWEEN @页内最小pid AND @页内最大pid
group by a.pid,a.name
order by a.pid desc
------解决思路----------------------
select #A.PID,#A.NAME,PARENTCLASS,MAX(CLASS) CLASS from #A JOIN #B on #A.PID=#B.PID
GROUP BY #A.PID,#A.NAME,PARENTCLASS