【问题标题】:Select n'th row using ROWNUM Oracle [duplicate]使用 ROWNUM Oracle 选择第 n 行 [重复]
【发布时间】:2018-10-23 16:21:53
【问题描述】:

我想知道为什么 1 不起作用,添加 ROWNUM rn 并在外部查询中使用 rn 使其在 2 中起作用的逻辑是什么?

我还认为使用 ROWNUM = somenumber(1 除外)在 oracle 中不起作用,是什么让它在 2 中起作用?

1.

SELECT SALARY
FROM (
    SELECT SALARY
    FROM EMPLOYEE
    WHERE ROWNUM <= N
    )
WHERE ROWNUM >= N;
RETURN result;

2.

SELECT SALARY
FROM (
    SELECT SALARY, ROWNUM rn
    FROM EMPLOYEE
    WHERE ROWNUM <= N
    )
WHERE rn = N;
RETURN result;

【问题讨论】:

  • 为什么不只是SELECT SALARY FROM EMPLOYEE WHERE ROWNUM = N

标签: sql oracle


【解决方案1】:

在第二个查询中,您使用的不是 rownum,而是一个固定值:rn。它的值在子查询中计算。

在第一个查询中,第二个 rownum 与 subselect 中的 rownum 不同。子选择中的 rownum 适用于子选择中的行集。并且外部查询中的 rownum 适用于外部查询。因此,oracle 会看到您的第一个查询,例如:

SELECT SALARY
FROM something
WHERE ROWNUM >= N;
RETURN result;

这不会给出记录,因为第一行是 rownum = 1,它不是 >= N。第二行现在是第一行,它不是 >= N。依此类推。

请参阅here 另一个具有相同问题的问题。

如果你愿意,rownum 是最后计算的。它是在获取行时分配的。所以,第一行的 rownum = 1。:)

【讨论】:

    猜你喜欢
    • 2020-07-27
    • 2012-03-03
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    相关资源
    最近更新 更多