问题描述
- oracle 中exist和rownum并用的问题
-
SELECT * FROM T_FIN_CURRENT_PROFIT TWHERE 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