为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:
【CPU】:
【问题描述】:
sql:
SELECT *
FROM (
SELECT
row_.,
rownum AS rownum_
FROM (
SELECT *
FROM ffssocom.doc doc0_
ORDER BY doc0_.id desc
) row_
)
WHERE rownum_ > 170 and rownum_ <= 180;
只要条件rownum_ 以180行为结尾,查询结果就为null,其它行数结尾查询都正常 ,
例如查询条件:
WHERE rownum_ > 170 and rownum_ <= 179, WHERE rownum_ > 170 and rownum_ <= 181,WHERE rownum_ = 180,WHERE rownum_ >= 180结果都正常,只有条件含有rownum_ <= 180才会返回为null
注:
1,只有一张表有这个问题,其余表正常,
2,如果去掉 ORDER BY排序后查询结果也正常,(与排序字段无关,无论更换哪个排序字段都会返回null)
为什么以180结尾会查不出,是什么原因导致的?
对了。你那个排序列的源表的doc_id是否存在null的情况,这也是其中考虑的问题
顺便发下你的数据库版本
select id_code, build_version from v$instance;
-- 第一种 SELECT * FROM ( SELECT row_., rownum AS rownum_ FROM ( SELECT * FROM ffssocom.doc doc0_ ORDER BY doc0_.id desc ) row_ WHERE rownum <= 180 ) where rownum_ > 170 ;
-- 第2种 SELECT * FROM ffssocom.doc doc0_ ORDER BY doc0_.id desc limit 170,10;
-- 第三种 SELECT top 170,10 * FROM ffssocom.doc doc0_ ORDER BY doc0_.id desc;
-- 第四种 SELECT * FROM ffssocom.doc doc0_ ORDER BY doc0_.id desc offset 170 rows fetch next 10 rows only;
-- 第五种 select * from ( SELECT *, row_number() over(order by doc0_.id desc) rownum_ FROM ffssocom.doc doc0_ ) where rownum_ > 170 and rownum_ <= 180;
还有很多变形,不再叙述。
支持oracle,mysql,sqlserver的语法格式