使用ROWNUM Oracle

时间:2018-10-23 05:49:46

标签: sql oracle

我想知道为什么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;

1 个答案:

答案 0 :(得分:2)

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

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

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

这不会提供记录,因为第一行是rownum = 1,而不是> =N。第二行现在获取了第一行,它不是> =N。等等。

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

如果需要,rownum是最后计算的内容。当获取一行时分配。因此,总是第一行的rownum =1。:)