在sql数据库中联表查询,实现在多个表之间的数据取出,进行排序,分页显示,速度很慢,请高人指点!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在sql数据库中联表查询,实现在多个表之间的数据取出,进行排序,分页显示,速度很慢,请高人指点!相关的知识,希望对你有一定的参考价值。

select top (10) a.iid,c.cMajor,a.cMemo,a.bMaster,a.bDoctor,a.bPostdoctoral,a.bKeySubject,a.bCharacter,a.blaboratory,a.bHighQuality,a.bKeyMajor,a.bSkill,a.bZsb,b.cUniversity,b.iUniversityid,e.cprovince,f.ctype,a.cBatch,umc.icount,umc.nFee,a.iJobRate,a.bCooperation , t.i, t.p
from tUniversityMajorTemp as a
left join tuniversity as b on a.iuniversityid=b.iuniversityid
left join tUniversityMajorScore as umc on a.iid=umc.tuniversitymt
left join tProvince as e on b.iProvinceID=e.iprovinceid
left join tUniversityType as f on b.iTypeID=f.itypeid
left join tMajor as c on a.tMajor=c.iMajorID
left join tMajorCourse as d on c.iMajorID=d.iMajorID
left join tUmC as g on a.iid=g.tUid
left join ( select a.tuniversitymt,cast(sum(a.idown-b.iscore)*1.0/sum(a.ijs) as decimal(15,2)) as i ,
cast(sum(a.idown)*1.0/sum(a.ijs) as decimal(15,2)) as p ,b.itype,b.ibatch
from tuniversitymajorscore as a
left join batch as b on a.iyear=b.iyear
where ( a.iyear='2006' or a.iyear='2007' or a.iyear='2008' or a.iyear='2009')
group by a.tuniversitymt ,b.itype,b.ibatch ) as t on a.ttype=t.itype and a.cbatch=t.ibatch and a.iid=t.tuniversitymt
where umc.iYear=2010 and (a.iid not in ( select top ( (2-1)* 10 ) a.iid
from tUniversityMajorTemp as a
left join tuniversity as b on a.iuniversityid=b.iuniversityid
left join tUniversityMajorScore as umc on a.iid=umc.tuniversitymt
left join tProvince as e on b.iProvinceID=e.iprovinceid
left join tUniversityType as f on b.iTypeID=f.itypeid
left join tMajor as c on a.tMajor=c.iMajorID
left join tMajorCourse as d on c.iMajorID=d.iMajorID
left join tUmC as g on a.iid=g.tUid
left join ( select a.tuniversitymt,cast(sum(a.idown-b.iscore)*1.0/sum(a.ijs) as decimal(15,2)) as i ,
cast(sum(a.idown)*1.0/sum(a.ijs) as decimal(15,2)) as p ,b.itype,b.ibatch
from tuniversitymajorscore as a left join batch as b on a.iyear=b.iyear
where ( a.iyear='2006' or a.iyear='2007' or a.iyear='2008' or a.iyear='2009')
group by a.tuniversitymt ,b.itype,b.ibatch ) as t on a.ttype=t.itype and a.cbatch=t.ibatch and a.iid=t.tuniversitymt
where umc.iYear=2010 and a.cBatch='2' and a.tType='1' ORDER BY t.i desc ))

and a.cBatch='2' and a.tType='1' ORDER BY t.i desc

where ( a.iyear='2006' or a.iyear='2007' or a.iyear='2008' or a.iyear='2009')
条件改成a.iyear in ('2006,'2007','2008','2009') 试试
参考技术A 不慢才不正常,联这么多表,还是全是外连接 参考技术B 赶快优化,不然,你cpu都会被烧坏

以上是关于在sql数据库中联表查询,实现在多个表之间的数据取出,进行排序,分页显示,速度很慢,请高人指点!的主要内容,如果未能解决你的问题,请参考以下文章

如何在MYSQL中联合多个表[重复]

mysql左连接右连接(查询两张表不同的数据)

mysql左连接右连接(查询两张表不同的数据)

第12课 联结表

SQL多表联合查询

SQL语句中LEFT JOIN和RIGHT JOIN 以及INNER JOIN的区别