oracle 分页 数据重复 数据不正确

oracle 一般分页的写法为

select a.id,a.title,rownum as rn,a.create_time from 
                   (select a.* from temp a order by create_time desc) a  where rownum<=20

注意:我用的是 create_time 来进行排序 create_time 中有相等的

为了对比分页数据的差异我用left join 来看数据是否正常

这个是用的一个分页 我用了关联来对比分20条数据和10的数据之间的差异

select a.title,a.rn,b.title,b.rn from 
           (select a.id,a.title,rownum as rn,a.create_time from 
                   (select a.* from temp a order by create_time desc) a  where rownum<=20) a
   left join
           (select a.id,a.title,rownum as rn,a.create_time from 
                   (select a.* from temp a order by create_time desc) a  where rownum<=10) b
 on a.id=b.id

执行结果

按道理是右边前面10条会和左边前面10条数据一样 但是运行后是不一样的

如果这样的话 会有在翻页钟可能出现一条记录会在多个页面出现的现象 甚至多个页面数据一样

sql调整后 在嵌套一层

select a.* from 
           (select a.id,a.title,rownum as rn,a.create_time from 
                   (select a.* from temp a order by create_time desc) a) a  where a.rn<=20
select a.title,a.rn,b.title,b.rn from 
   (select a.* from 
           (select a.id,a.title,rownum as rn,a.create_time from 
                   (select a.* from temp a order by create_time desc) a) a  where a.rn<=20) a
   left join
   (select a.* from 
           (select a.id,a.title,rownum as rn,a.create_time from 
                   (select a.* from temp a order by create_time desc) a) a  where a.rn<=10) b
 on a.id=b.id

执行结果对比

这样结果 就对的上了

有没有发现虽然是相同的sq 套了一层select后结果集都变了 前后两张图片的 左列结果都不是一样的

总结  我这里用的时间排序 其中时间相等的数据很多 如果排序字段唯一 应该不会有这种问题出现

时间: 2024-08-29 18:51:51

oracle 分页 数据重复 数据不正确的相关文章

oracle删掉重复数据的语法

--查询重复数据-- SELECT XYH,COUNT(*) FROM BGJL GROUP BY XYH having(count(*)>1) --删掉重复数据-- DELETE from BGJL WHERE (XYH) IN ( SELECT XYH FROM BGJL GROUP BY XYH HAVING COUNT(XYH) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM BGJL GROUP BY XYH HAVING COUNT(*)

oracle 查看删除重复数据

1.查询重复数据select * from 表名 where 重复字段(一般为主键)in (select 重复字段 from 表名 group by 重复字段 having count(WF_OID)>1) Select 重复字段,Count(*) From表名 Group By 重复字段 Having Count(*) > 1 2.删除重复数据DELETE from 表名 WHERE (id) IN ( SELECT 重复字段 FROM 表名 GROUP BY 重复字段HAVING COUN

Oracle分页查询排序数据重复问题

在项目开发过程中大量的使用了分页查询,当想要让数据按照日期排序时,出现了很多重复的数据出现. 造成这一问题出现的原因是:在数据中,日期的值不是唯一的. 我们知道 Oracle的分页查询是没有进行任何排序操作的,Oracle是顺序的从数据块中读取符合条件的数据返回到客户端. 而Oracle的排序算法不具有稳定性,也就是说,对于键值相等的数据,这种算法完成排序后,不保证这些键值相等的数据保持排序前的顺序. 解决这一问题的方法就是在后边增加一个唯一性列,比如主键,问题解决. select * from

oracle 删除掉重复数据只保留一条

用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有

oracle 查找删除重复数据

查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录 DELETE from 表 WHERE (id) IN ( SELECT id FROM 表 GROUP BY id HAVING COUNT(id)

删除oracle 表中重复数据sql语句、保留rowid最小的一条记录

delete from tablename a where rowid > ( select min(rowid) from table_name b where b.id = a.id and b.name=a.name);

数据库中对重复数据行的查询删除操作

oracle中对重复数据的查询和删除操作 --1.查询表中username='lingjie'的重复记录select userid,username from nmb where username in(select username from nmb group by username having count(username)>1) --2.删除表中username 重复的数据,只保留rowid最小的一条delete from nmb where username in(select us

oracle 分页查询数据重复问题

最近在做项目的时候发现一个问题,oracle 在查询分页数据的时候,有几条数据重复查询了,并且有几条数据在分页的时候消失了.百度了一下发现,ORACLE 在查询数据的时候返回的行不是固定的,他只是按照顺序从数据中读取符合条件的数据返回到客户端,给用户误解为默认排序. 然而,当我加上排序的时候,还是查询有重复的数据,(指第一页数据在第二页也查询出来了),这是我就疑问了,当我检查数据的时候,发现我排序的字段有空的情况,而且有很多条,导致排序返回的 伪列并不是唯一的. 总结: oracle 分页查询数

MySQL分页时使用 limit+order by 会出现数据重复问题

1.问题描述 在MySQL中我们通常会采用limit来进行翻页查询,比如limit(0,10)表示列出第一页的10条数据,limit(10,10)表示列出第二页.但是,当limit遇到order by的时候,可能会出现翻到第二页的时候,竟然又出现了第一页的记录. SELECT `post_title`, `post_date` FROM post WHERE `post_status` = 'publish' ORDER BY view_count desc LIMIT 5, 5 使用上述SQL