项目中有个业务需要多张表的一个连接,还需要根据{size}和{offset}进行分页,这个时候,问题来了,表连接如果是一对一关系,正常在sql最后分页,什么事都没有,可是,一旦有多对多关系和一对多关系,这种分页明显用不了了!为什么???
我们可以分析一下:假如,t_student有10条数据,t_course表有多条,一个同学可以选择多个课程,一个课程可以属于多个学生,典型多对多,因此需要一张关系表t_relation,假如在t_student表中的1条数据对应关系表的5条数据,那么,我们如果按照t_course left join t_relation .... left join t_relation,那么查询出来的是50条数据,分页!而单表t_student只有10条,如果我需要t_student中的前两条,按照上述分页是查出10条,那么,分页结果是什么???明显不符合要求,因此解决此办法除了存储过程的方法,用传统表连接来解决则只能先按分页查询t_student表然后让查询出来的表作为虚表再做表连接,后面没有分页来处理,比如:
select ...
from (select ... from t_student limit 0,2) dual1
left join t_relation on t_relation.sid=t_student.id
left join t_course on t_course.id=t_relation.cid