exists-oracle 中exist和rownum并用的问题

问题描述

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条

解决方案

举个例子 表中有 An 200条

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

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

你把你的ROWNUM < 10

放到最外层的查询就好了

解决方案二:

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

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

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

时间: 2024-09-18 14:57:13

exists-oracle 中exist和rownum并用的问题的相关文章

oracle的rowid和rownum简介

[ 概要 ] 刚刚接触oracle的同学可能常常会被rowid和rownum这两个词弄混, 弄清楚这两个家伙对于我们写sql会有很大的帮助, 下面偶就抛砖引玉, 简单地谈谈他们之间的区别吧. [ 比较 ] rowid和rownum都是oracle中的伪列, 但他们还是存在本质区别: rowid: 是物理地址, 用于定位数据表中数据的位置, 它是唯一的且不会改变. rownum: 是根据查询的结果集给每行分配的一个逻辑编号, 查询结果不同, rownum自然不同. 对于同一条记录, 查询条件不同,

Oracle中rownum在结果集中排序的使用

  Oracle中rownum在结果集中排序的使用 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=),并非说用>,>=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid 可有些不一样,下面以例子说明 有一张表:tb

ORACLE 中ROWNUM用法总结!

ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=),并非说用>,>=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid 可有些不一样,下面以例子说明 假设某个表 t1(c1)

Oracle中的rownum与DB2中的row_number()over()

问题描述 Oracle中的rownum与DB2中的row_number()over() select rownum , m.* from (select '汇总' as MENUNAMES,count(*) as NUMCOUNT from PEVENTRECORD where (EVENT='CLICK' OR EVENT = 'VIEW') AND TO_CHAR(TRANSTIME,'yyyy-MM-dd') >= '2015-02-02' AND TO_CHAR(TRANSTIME,'y

oracle中rownum和row_number()_oracle

row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的). 与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪劣rownum然后再进行排序,而row_number()在包含排序从句后是先排序再计算行号码. 一.oracle中rownum 用于从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字

oracle中的rownum问题

问题描述 oracle中的rownum问题 为什么这样 SELECT * FROM TESTROWNUM T WHERE ROWNUM in (1,2,3,4,5,6,7,8,9) 有结果 这样就没有结果 SELECT * FROM TESTROWNUM T WHERE ROWNUM in (SELECT ROWNUM rn FROM (SELECT ID FROM TESTROWNUM T1 ORDER BY T1.ID ASC) where ROWNUM < 10) 解决方案 SELECT

oracle中 exists 与 in效率及其用法

oracle中 exists 与 in效率及其用法 用not exists 代替not in select * from tsp_product p where not exists(select '' from tsp_orderitem i where p.id=i.product_id) select * from tsp_product p where id not in(select product_id from tsp_orderitem i where p.id=i.produc

Oracle数据库中的分页--rownum

1. 介绍 当我们在做查询时,经常会遇到如查询限定行数或分页查询的需求,MySQL中可以使用LIMIT子句完成,在MSSQL中可以使用TOP子句完成,那么在Oracle中,我们如何实现呢? Oracle提供了一个rownum的伪列,它会根据返回记录生成一个序列化的数字. rownum和rowid都是伪列,但是两者的根本是不同的.rownum是根据SQL查询出的结果给每行分配一个逻辑编号,所以SQL不同也就会导致最终rownum不同:rowid是物理结构上的,在每条记录INSERT到数据库中时,都

Oracle中的优化器--CBO和RBO

Oracle中的优化器--CBO和RBO Oracle数据库中的优化器又叫查询优化器(Query Optimizer).它是SQL分析和执行的优化工具,它负责生成.制定SQL的执行计划.Oracle的优化器有两种,基于规则的优化器(RBO)与基于代价的优化器(CBO)          RBO: Rule-Based Optimization 基于规则的优化器          CBO: Cost-Based Optimization 基于代价的优化器 RBO自ORACLE 6以来被采用,一直沿