【发布时间】:2017-03-10 08:13:04
【问题描述】:
这次我遇到的问题是层次表的分页查询。
table_name(id varchar2(50), id_parent varchar2(50));
所以对于我有的示例数据:
WITH table_name AS
(
SELECT '3' id, '' id_parent FROM DUAL UNION ALL
SELECT '5' id, '3' id_parent FROM DUAL UNION ALL
SELECT 's' id, '3' id_parent FROM DUAL UNION ALL
SELECT '4' id, 'as' id_parent FROM DUAL UNION ALL
SELECT 'aa' id, 'as' id_parent FROM DUAL UNION ALL
SELECT 'as' id, '3' id_parent FROM DUAL UNION ALL
SELECT 'ad' id, '3' id_parent FROM DUAL UNION ALL
SELECT '2' id, '' id_parent FROM DUAL
)
SELECT LPAD('-', 2 * (level - 1), '-') || id AS id1,
id_parent,
rownum --Seem not legit here
FROM table_name
START WITH id_parent IS NULL
CONNECT BY PRIOR id = id_parent
--ORDER SIBLINGS BY id
;
这是预期的输出:
id id_parent rownum
2 1
3 2
--5 3 3
--ad 3 4
--as 3 5
----4 as 6
----aa as 7
--s 3 8
现在我依靠 rownum 为 row_number 进行分页。作为 Oracle 层次结构查询的文档,这确保我可以将树显示为我们想要的预购 Traveral,但作为一般的 SQL,IMO 不保证对同级节点进行排序(或不排序? )。
所以我需要像ROW_NUMBER() OVER (ORDER SIBLINGS BY id) 这样的东西。但我没能找到类似的东西。
有什么方法可以解决这个问题吗?
【问题讨论】:
标签: sql oracle hierarchy row-number