我想知道为什么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;
答案 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。:)