select x.*,y.*
from (select count(*) totalCount from (...........) x,
(select v.*, rownum rowNo from (...........)) y where rowNo >= 1 and rowNo <= 20
分页时候的语句,其中..........为查询全部的记录数,前半部分x.*结果为记录个数,后半部分为要取出的当前页的记录,
是否有简化的方法,比如
1、.........这句可能重复查了两次
2、.........语句可能很长,且出现两次,使整个sql语句变长了,阅读不方便
你可以在JE的问答频道搜索“分页技术”,就可以找到很多的。。更不用说百度了
有必要搞的那么复杂吗。你这里查询出它的总记录数有什么用呢,你要取得1-20条,就直接取好了,你上面的Sql中取总记录数没有被你使用,无任何意义。
没看懂你的SQL,这是我前段时间要做分页时找的资料,可以供参考~
http://www.fuchaoqun.com/2009/04/efficient-pagination-using-mysql/
分页的技术确实是很多,而且各有特点,对于你说的问题,我觉得没必要放在一个Sql语句里的,写一个方法专一去查询总条数不好吗。。
把count部分和取数据部分中公共的sql取出来放到前边。可以参考如下:
WITH tmp AS
(SELECT *
FROM table_names
where_clause
order_clause
)
select x.*,y.*
from (select count(*) totalCount from tmp) x,
(select v.*, rownum rowNo from tmp ) y
where rowNo >= 1 and rowNo <= 20
org.springframework.jdbc.UncategorizedSQLException: Hibernate transaction synchronization: could not update: [com.leadron.trackao.document.po.AnaesSummary#CS100006732]; uncategorized SQLException for SQL [update ANAES_SUMMARY set PRE_OPERATION=?, IN_OPERATION=?, RECOVER=?, FINISH_TIME=?, CREATE_TIME=?, OWNER_ID=?, STATE=?, VEIN_ANAES=?, ANAES_MONITOR=?, ANAESUMMARY_METHOD=?, ANAESCONTENT=? where ID=?]; SQL state [null]; error code [17070]; ?????????????: 2011; nested exception is java.sql.SQLException: ?????????????: 2011
请大家帮个忙,这个是什么错啊。
oracle中分页有三种:
一:rowid
二:rownum
三:函数
其中rowid 的分页效率最高,代码页最多