分页查询的SQL话语,出现重复记录

分页查询的SQL语句,出现重复记录!
table1中表有字段(其余字段省)
ID  主键
DATA_UPDATE_TIME 数据更新时间(只存储了年月日)

分页查询的语句如下
select *
   from (
        select row_.*, rownum rownum_
           from ( select  p.id from table1 p
             order by  p.DATA_UPDATE_TIME desc )
   row_ where rownum <= )
where rownum_ >

以每页显示10条为例
第一次  rownum <= 10)   where rownum_ > 0
第二次  rownum <= 20)   where rownum_ > 10

发现有一条记录在两次查询结果中重复出现,不知道问题出在哪里,请忙帮看看。

另:
DATA_UPDATE_TIME 的值有重复,不知道跟它有没有关系。
如果按ID排的话就不会出现这个问题
1 楼 andyao 2007-01-29  
lenozhi 写道
table1中表有字段(其余字段省)
ID  主键
DATA_UPDATE_TIME 数据更新时间(只存储了年月日)

分页查询的语句如下
select *
   from (
        select row_.*, rownum rownum_
           from ( select  p.id from table1 p
             order by  p.DATA_UPDATE_TIME desc )
   row_ where rownum <= )
where rownum_ >

以每页显示10条为例
第一次  rownum <= 10)   where rownum_ > 0
第二次  rownum <= 20)   where rownum_ > 10

发现有一条记录在两次查询结果中重复出现,不知道问题出在哪里,请忙帮看看。

另:
DATA_UPDATE_TIME 的值有重复,不知道跟它有没有关系。
如果按ID排的话就不会出现这个问题


sql语句写的很不好,建议花时间补补sql,关系代数
2 楼 vaja 2007-01-29  
如果order by 不能唯一确定记录的顺序就会出现这个问题。
解决的方法是把分页部分全部拿到最外层进行。

select * from ( 
  select row_.*, rownum rownum_ 
  from (
    select p.id from table1 p 
    order by p.DATA_UPDATE_TIME desc 
  ) row_
) 
where rownum_ > ? and rownum_ <= ? 
3 楼 eyejava 2007-01-30  
引用
select *
from (
select row_.*, rownum rownum_
from ( select p.id from table1 p
order by p.DATA_UPDATE_TIME desc )
row_ where rownum <= )
where rownum_ >

两个rownum所处的位置不一样,怎么会产生这样的sql ?
4 楼 lenozhi 2007-01-30  
这句语是hibernate生成的,还真不是我写的。二楼同学的意见不错,谢谢了。