首页 新闻 会员 周边 捐助

两个表联合分页查询的SQL语句,谢谢!

0
悬赏园豆:50 [待解决问题]

学生 A表: pid,name

课程 B表:pid,class,parentclass

学生会上很比较多的课程class(语文、数学),但学生对class又报了parentclass(譬如基础班、考前班),这样,pid和parentclass就会出现一对多。譬如肖明报了语文的基础班,又报了数学的基础班,如果按照parentclass基础班来进行查询学生的话,就会出现两条肖明的数据。

pid      class    parentclass

肖明        语文      基础班

肖明       数学       基础班

 

请教这种情况如何按照parentclass为条件进行分页查询并得出去掉学生重复值的count数。谢谢。

琢磨了一下:

第一页:

select top 10 a.pid,a.name from A表 a left join B表 b ON a.pid=b.pid where b.parentclass='基础班' group by a.pid,a.name order by a.pid desc

第二页:

select top 10 a.pid,a.name from A表 a left join B表 b ON a.pid=b.pid where b.parentclass='基础班' and b.pid >(select min(pid)  from (select top 10 pid  from  B表  where parentclass='基础班' group by pid  order by pid desc) as tmp)  group by a.pid,a.name order by a.pid desc

 

获得总数值:

select distinct count(*) from B表 where parentclass=‘基础班’

各位帮忙指点下,能有更好的解决办法感激不尽!

唐朝程序员的主页 唐朝程序员 | 初学一级 | 园豆:159
提问于:2014-11-25 01:12
< >
分享
所有回答(5)
0

select count(pid) from xxx group by pid, parentclass

差不多就是这样,你试试就出来了。

XiaoFaye | 园豆:3087 (老鸟四级) | 2014-11-25 05:29
0

select pid,parentclass,count(1) from (select * from A left join B on A.pid=B.pid) group by pid, parentclass

风醉 | 园豆:1197 (小虾三级) | 2014-11-25 09:04
0
--这就是所有学生的选课信息
with cte
as (
select t1.pid,t1.name,t2.class,t2.parentclass from A t1
join B t2
on t1.pid=t2.pid
)
--接着求count数,那么直接分组求count即可

select COUNT(cte.parentclass) from cte
group by cte.pid,cte.parentclass


大概就是类似的SQL
幻天芒 | 园豆:37207 (高人七级) | 2014-11-25 09:05

select t1.pid,t1.name,t2.class,t2.parentclass from A t1 join B t2 on t1.pid=t2.pid where t2.parentclass='基础班'

这条语句有重复值,而且这条语句分页的sql语句不知道写!求指点!

支持(0) 反对(0) 唐朝程序员 | 园豆:159 (初学一级) | 2014-11-25 11:25

@唐朝程序员: where只是筛选了一个parentclass,没有筛选user字段,所以有重复;

对于分页的话,你可以采取rownum = row_number() over ()

然后在外层套一个select来实现row_number()分页。

支持(0) 反对(0) 幻天芒 | 园豆:37207 (高人七级) | 2014-11-25 14:35
0

建议不要针对问题问问题,你还是把sql基础好好熟悉一下吧。磨刀不误砍柴工!要不然,改一改你又问了啊。所以你还是吧sql的基础知识拿起来吧!

Mr.Brian | 园豆:1518 (小虾三级) | 2014-11-25 09:14

sql基础确实不好,但我是几年来第一次在这里问问题!时间比较急,所以提出来了,自己琢磨了好久。

select t1.pid,t1.name,t2.class,t2.parentclass from A t1 join B t2 on t1.pid=t2.pid where t2.parentclass='基础班'

这条语句有重复值,而且这条语句分页的sql语句不知道写!求指点!

支持(0) 反对(0) 唐朝程序员 | 园豆:159 (初学一级) | 2014-11-25 11:24
0

没有太看明白你这问题的意思..

如果直接是

select a.name,b.parentclass from a,b where a.pid=b.pid group by a.name,b.parentclass

可以么.?

只会造轮子 | 园豆:2274 (老鸟四级) | 2014-11-25 11:32

我自己解决了。

第一页:

select top 10 a.pid,a.name from  A表 a LEFT JOIN B表 b ON a.pid=b.pid where b.parentclass='基础班' group by a.pid order by a.pid desc

后面的页就不知道怎么写了

支持(0) 反对(0) 唐朝程序员 | 园豆:159 (初学一级) | 2014-11-25 19:41

上面打错了,应该第一页是这样的:

select top 10 a.pid,a.name from  A表 a LEFT JOIN B表 b ON a.pid=b.pid where b.parentclass='基础班' group by a.pid,a.name  order by a.pid desc

 

支持(0) 反对(0) 唐朝程序员 | 园豆:159 (初学一级) | 2014-11-25 19:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册