如何将ROWNUM与嵌套查询一起使用

时间:2017-01-26 19:47:59

标签: sql oracle indexing rownum

SELECT * FROM(
SELECT * FROM(
SELECT PART_NO, SRC_PART_NO, CTNM_ENG, DESCRIPTION, USER_ID, REG_DT, CHG_DT, FLAG,       
(select count(*) from ( SELECT PART_NO, SRC_PART_NO, CTNM_ENG, DESCRIPTION, USER_ID, REG_DT, CHG_DT, FLAG
FROM GM_PART_LIST
WHERE PART_NO LIKE  '%' || '%' AND SRC_PART_NO LIKE  '%' || '%' AND CTNM_ENG LIKE  'BOLT'|| '%'
AND 1 = 1) ) as total_count -- Nested subquery that return total count of record set. plug in same where conditions.
FROM GM_PART_LIST
WHERE PART_NO LIKE  '%' || '%' AND SRC_PART_NO LIKE  '%' || '%' AND CTNM_ENG LIKE  'BOLT'|| '%'
AND 1 = 1
ORDER BY PART_NO ASC))
WHERE ROWNUM BETWEEN 2 AND 202; 

如果我在1到200之间搜索,如何使用上面的查询它可以很好地提取记录但是当我将其切换为2或大于1的另一个整数时它无法查询任何记录? 这是一个语法问题吗?提前感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:1)

在评估ROWNUM条件的行时,会分配

where。检索行源的第一行并给出ROWNUM=1。如果其中一个were条件为ROWNUM > 1,则不会选中此行。

然后ROWNUM=1重新分配到下一行(这将再次导致where子句失败),依此类推。这是因为最后ROWNUM必须从1连续运行,它不会是带有间隙的序列。因此,任何不允许ROWNUM为1(例如:where mod(ROWNUM, 2) = 0)的条件都会产生零行,并且出于完全相同的原因。