簡體   English   中英

如何在分層查詢(Oracle SQL)中選擇前N個元素

[英]How to select first N elements in hierarchical query (Oracle SQL)

我有以下問題。 oracle12 db中有一個包含數百萬個元素的層次結構。 如何選擇層次結構的前N個對象。 選擇哪個對象都沒有關系,唯一的要求是對象應該具有繼承權。 Rownum過濾器根本不起作用:

SELECT object_id
FROM objects
WHERE rownum < 10
START WITH object_id = 9072243521013844211
CONNECT BY PRIOR object_id = parent_id

我得到以下執行計划:對象選擇后進行過濾。

/*
LEVEL   PLAN    ROWS    COST    PREDICATES
*/
1   SELECT STATEMENT (OPTIMIZER=ALL_ROWS)   8   1   

2     COUNT         

3       FILTER          filter(ROWNUM<10)

4         CONNECT BY (WITH FILTERING)           access("PARENT_ID"=PRIOR "OBJECT_ID")

5           TABLE ACCESS (BY INDEX ROWID) "OBJECTS"         

6             INDEX (UNIQUE SCAN) "XPKOBJECTS"  1   1   access("OBJECT_ID"=9072243521013844211)

5           NESTED LOOPS            

6             CONNECT BY PUMP           

6             TABLE ACCESS (BY INDEX ROWID BATCHED) "OBJECTS"   8   1   

7               INDEX (RANGE SCAN) "XIF25OBJECTS"   8   1   access("PARENT_ID"=PRIOR "OBJECT_ID")

以下示例解決方案應提供一些指導:

with objects as 
(select level object_id, decode(level+1, :len+1, null, level+1) parent_id 
from dual connect by level<=:len )
SELECT object_id
FROM objects
where level <= :n_objects
START WITH object_id = 1
CONNECT BY PRIOR parent_id = object_id
; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM