【问题标题】:How to use ROWNUM with nested queries如何在嵌套查询中使用 ROWNUM
【发布时间】:2017-01-26 19:47:59
【问题描述】:
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 的整数时,它无法查询任何记录? 这是语法问题吗?提前感谢您提供的任何帮助。

【问题讨论】:

    标签: sql oracle indexing rownum


    【解决方案1】:

    ROWNUM 在针对where 条件评估行时分配。检索行源的第一行并给出ROWNUM=1。如果were 条件之一是ROWNUM > 1,则不会选择此行。

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

    【讨论】:

      猜你喜欢
      • 2013-10-22
      • 1970-01-01
      • 2014-05-21
      • 2015-05-29
      • 2011-11-14
      • 2020-06-04
      • 1970-01-01
      • 2015-07-31
      相关资源
      最近更新 更多