我在對列進行排序并將它們分頁時遇到了一些問題。
例如,
select *
from
(select A.*, ROWNUM RNUM
from
(select * from USER order by name) A
where ROWNUM <= 3 --edited
) B
where RNUM >= 1
作為一個
和
select *
from
(select A.*, ROWNUM RNUM
from
(select * from USER order by name) A
where ROWNUM <= 4 --edited
) B
where RNUM >= 1
作為乙
兩者的區別是列rownums。我想知道為什么會這樣。
A回傳,
RNUM | NAME
-----------
1 | a
-----------
2 | b
-----------
3 | c
B回傳。
RNUM | NAME
-----------
1 | a
-----------
2 | f -- what happened?
-----------
3 | b
-----------
4 | c
這只是一個例子。
為什么每列會因為 rownum 的范圍而得到不同的 rownum?
uj5u.com熱心網友回復:
為什么發生了什么事?
- source 是(顯然,假表名;這是為回傳當前登錄用戶
select * from user的用戶名的函式保留的),因此它從表中選擇所有行 rownum rnum然后反映從該表回傳的所有行數,從 1 到該表中的總行數where rownum <= 10將源子查詢回傳的行數限制為 10(第一個示例)/200(第二個示例)。代表著- 第一個查詢最多使用 10 行
- 第二個查詢最多使用 200 行
- 最終過濾器 (
where rnum >= 1) 回傳之前所說的內容 - 最多 10(或 200)行
所以有什么問題?你期望得到什么?
根據您的評論:似乎order by缺少該條款:
select *
from
(select A.*, ROWNUM RNUM
from
(select * from USER order by name) A
where ROWNUM <= 10
order by a.name --> this
) B
where RNUM >= 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/478829.html
