2 freestyle15254656 freestyle15254656 于 2016.02.03 11:21 提问

oracle 中exist和rownum并用的问题

SELECT * FROM T_FIN_CURRENT_PROFIT T

WHERE EXISTS (SELECT ROWNUM
FROM (SELECT ID
FROM T_FIN_CURRENT_PROFIT T1
WHERE T1.STATUS = 2
AND T1.PROFIT_DATE = TO_DATE('20160108', 'YYYYMMDD')
AND T1.FILE_ID = '1'
ORDER BY T1.ID ASC) B
WHERE ROWNUM < 10
AND T.ID = B.ID)
这条语句我从数据库中查出100条记录 而不是10条

2个回答

fk002008
fk002008   2016.02.03 11:42

举个例子 表中有 An 200条

你使用自查询限制了A查出10条 Ai,Ai+1.....Ai+9
然后你用这个结果集再做限制条件
select * from 表 where A in (结果集)
但是这10条的数据A可能在原来表里有100条,因为这里它只是查询条件而已

一个表在查询自己的时候爱犯这种错误:
从结果集中的数据在做where中条件的时候别想认为它是从 结果集中取数据
只是用结果集中的数据再一次检索原来的表


你把你的ROWNUM < 10

放到最外层的查询就好了

freestyle15254656
freestyle15254656 但是我的ID是主键 不会重复 内层有10条数据 这个表没有重复数据
2 年多之前 回复
fk002008
fk002008   2016.02.03 11:28

典型的条件限制逻辑错误
你的限制条件都是在这个子查询里面 最里层得查询限制是对的

但是你外面的select才是最终的查询结果

你要想限制结果只能作用到最外层的查询

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
oracle 使用rownum进行分页的陷阱
同事遇到一个奇怪的问题,在使用下面分页导记录时发现分页后的记录跟总的记录数匹配(总的记录数大概25000),但是有些记录不存在,有些重复:   SELECT *   FROM (SELECT row_.*, rownum rn           FROM (select --省略几百行                  order by sdate, mname, blevel asc
Oracle中rownum与order by排序问题
今天发现一个bug,一个页面数据展示,既要求分页又要求以某一个字段降序排序,第一直觉就是使用rownum分页,用order by排序。写完代码后,本以为可以完全没有bug啦,但今天测试人员教过过去一看,竟然排序有问题。于是乎就发现了一个问题。以下截图说明问题:发现问题没得,rownum和seq完全是乱序的,所以这种方式分页排序肯定是有问题的,遂采用如下方式实现最终效果:
Oracle中rownum用法总结
  对于Oracle的rownum问题,很多资料都说不支持>,>=,=,between……and,只能用以上符号(,>=,=,between……and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个rownum伪列的意义就不应该感到惊奇,同样是伪列,rownum与rowid可有些不一样,下面以例子说明:         假设某个表t1
HIVE迁移的点点滴滴(二)--rownum分组
今天编写的脚本里有个根据某个字段进行rownum分组的需求。在oracle这个用分析函数row_number() over,能很轻松搞定,hive里就麻烦了。模拟的表结构如下:user_id    buy_num   rownum  1               30              1  1               20              2  1            
关于oracle的rownum
关于oracle的rownum关于oracle的rownum关于oracle的rownum关于oracle的rownum关于oracle的rownum
ORACLE 导大数据混合使用rownum和order by引起的乱序问题
原排序代码:       select id ,rn from(                    select id ,rownum rn from temp_org order by  id )           where rn >10000 and rn 由于原库是生成库,所以为了安全起见,我新建了一张临时表 :create table temp_org as select
Oracle下用rownum进行分页时排序的错乱
今天早上用户打电话说系统的排序有问题,仔细看了一下,问题好像是出在ROWNUM这个函数上。在Oracle下ROWNUM函数是对查询结果按照顺序分配自增行序号,所以很多人都利用这个特点进行分页操作,即rownum between 30 and 60,这种限制返回行数的小窍门在普通情况下都很正常,但如果要对返回结果在进行排序就变得乱套了。如下查询:select page.* from( s
【SQL】—Oracle之row_number()与rownum效率大比拼
取前面11条数据的时间:rownum<row_number() 取后面11条数据的时间:rownum<row_number() rownum:取前面11条数据的时间<取后面11条数据的时间 row_number():取前面11条数据的时间<取后面11条数据的时间 相对取出11条数据(无论前后),rownum比row_number()大概节省一半的时间。 Ok,这就是对比的结果,看来,经典的分页查询,通过rownum还是很有道理的。因为它比ro
oracle11g分页优化,rowid和rownum的性能比较,解决越往后数据查询越慢的问题
先看看数据量,100万+的数据: 再看看使用传统rownum分页的情况,没有使用排序,因为排序在大数据量下会造成全表扫描的情况! oracle11g使用模糊查询%%,查询优化器一般情况下会选择使用索引,极端情况没有测试!这里在查询第一页的数据的时候耗时0.172秒!各列索引都已使用! 使用rowid查询第一页的数据: 查询第一页使用了0.031秒,其实差不多,如果求
SQL分页排序的实现与分页数据重复问题——以Oracle rownum为例
对于关系数据库来说,直接写SQL拉数据在列表中显示是很常用的做法。但如此便带来一个问题:当数据量大到一定程度时,系统内存迟早会耗光。另外,网络传输也是问题。如果有1000万条数据,用户想看最后一条,这时即便有足够的内存,在网络上传输这么多数据也得一两小时吧,恐怕没几个用户有这么耐心等。因此分页是必须的。   现在网上的论坛、博客什么的,基本上都会有分页功能,有些是SQL分页的,有些可能