如何在嵌套查询中使用 ROWNUM
How to use ROWNUM with nested queries
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 的整数时,它无法查询任何记录?
这是语法问题吗?预先感谢您提供任何帮助。
ROWNUM
在为 where
条件评估行时分配。检索行源中的第一行并给出 ROWNUM=1
。如果were
条件之一为ROWNUM > 1
,则不会选择该行。
然后 ROWNUM=1
被 重新分配 到下一行(这将再次使 where
子句失败)等等。这是因为最终ROWNUM
必须从1开始连续运行,不会是有空位的序列。因此,任何不允许 ROWNUM
为 1 的条件(例如:where mod(ROWNUM, 2) = 0
)都将产生零行,原因完全相同。
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 的整数时,它无法查询任何记录? 这是语法问题吗?预先感谢您提供任何帮助。
ROWNUM
在为 where
条件评估行时分配。检索行源中的第一行并给出 ROWNUM=1
。如果were
条件之一为ROWNUM > 1
,则不会选择该行。
然后 ROWNUM=1
被 重新分配 到下一行(这将再次使 where
子句失败)等等。这是因为最终ROWNUM
必须从1开始连续运行,不会是有空位的序列。因此,任何不允许 ROWNUM
为 1 的条件(例如:where mod(ROWNUM, 2) = 0
)都将产生零行,原因完全相同。