>SELECT instmax
FROM
(SELECT instmax,
rownum r
FROM
( SELECT * FROM pswlinstmax ORDER BY instmax DESC NULLS LAST
)
)
WHERE r = 2;
INSTMAX
-------
1049
>SELECT instmax
FROM
(SELECT instmax,
rownum
FROM
(SELECT * FROM pswlinstmax ORDER BY instmax DESC
)
)
WHERE rownum=2;
**NO RETURNED ROW**
为什么会给出不同的结果?我想对此进行详细解释。
答案 0 :(得分:8)
因为secont时间,rownum不是内部SQL的rownum而是外部的rownum!
这就是你需要“重命名”它的原因,以便它变得“固定”。
否则,rownum = 2过滤器永远不匹配,因为每一行都是第一行。
答案 1 :(得分:1)
SELECT instmax
FROM
(SELECT instmax,
rownum
FROM
(SELECT * FROM pswlinstmax ORDER BY instmax DESC
)
)
WHERE rownum=2;
**NO RETURNED ROW**
为获取的第一行分配了一个 ROWNUM为1并且成为条件 假。要获取的第二行是 现在第一行也被分配了 ROWNUM为1并且成为条件 假。所有行随后都失败了 满足条件,所以没有行 回。 Oracle9i SQL Reference
在第一个示例中,内联视图中的查询会返回所有行,每个行的增量ROWNUM
都指定了名称r
。