论坛首页 Java企业应用论坛

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

浏览 9790 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-01-29  
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排的话就不会出现这个问题
  • 描述: 第一次查询结果
  • 大小: 165.1 KB
  • 描述: 第二次查询结果
  • 大小: 167.8 KB
   发表时间: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,关系代数
0 请登录后投票
   发表时间: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_ <= ? 
0 请登录后投票
   发表时间: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 ?
0 请登录后投票
   发表时间:2007-01-30  
这句语是hibernate生成的,还真不是我写的。二楼同学的意见不错,谢谢了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics