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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!