このトピックでは、階層クエリ疑似列について説明します。
階層クエリ疑似列は、階層クエリでのみ有効です。 クエリで階層関係を定義するには、CONNECT BY句を使用する必要があります。 階層クエリの疑似列は次のとおりです。
CONNECT_BY_ISCYCLE
CONNECT_BY_ISLEAF
レベル
CONNECT_BY_ISCYCLE
CONNECT_BY_ISCYCLE疑似列の値は、行が階層内のループの開始位置であるかどうかを示します。
現在のノードにその祖先でもある子がある場合、CONNECT_BY_ISCYCLE疑似列は1を返します。 それ以外の場合は0を返す。
次の図では、ノードB1がループの開始位置です。 それは、その祖先でもある子ノードC2を有する。 
CONNECT_BY_ISCYCLE句のNOCYCLE。placement="break" id="5b70d6400fgd7" />
NOCYCLEは、CONNECT BYループによるクエリの失敗を防ぎます。
-- 例
-- テストテーブルを作成する
CREATE TABLE connect_by_table(id INT, pid INT, name TEXT);
INSERT INTO connect_by_table VALUES(1, NULL, 'A');
INSERT INTO connect_by_table値 (101, 1, 'B1');
INSERT INTO connect_by_table値 (102, 1, 'B2');
INSERT INTO connect_by_table値 (10101、101、'CO');
INSERT INTO connect_by_table値 (10102、101、'C1');
INSERT INTO connect_by_table値 (10201、102、'C2');
INSERT INTO connect_by_table値 (102、10201、'CYCLE');
SELECT * 、CONNECT_BY_ISCYCLE FROM connect_by_table CONNECT_BY_ISCYCLE=1 START id WITH=1 CONNECT BY NOCYCLE PRIOR id = pid;
id | pid | name | connect_by_iscycle
------ ------ ------- --------------------
10201 | 102 | C2 | 1
(1行) CONNECT_BY_ISLEAF疑似列は、現在の行がツリーのリーフである場合、1を返します。 それ以外の場合は0を返す。
次の図では、ノードC0とC1は階層のリーフノードです。 CONNECT_BY_ISLEAFは、C0とC1に対して1を返し、他のノードに対して0を返します。
SELECT名の例
、CONNECT_BY_ISLEAF FROM connect_by_table START WITH id = 1 CONNECT BY NOCYCLE PRIOR id = pid;"placement=" break "id=" a86798800ff7t " />
レベル
階層クエリによって返された各行について、LEVEL疑似列はルート行に1を返し、ルートの子に2を返します。
次の図は、階層のレベル1、レベル2、およびレベル3を示しています。
レベル
SELECT id, name, LEVEL FROM connect_by_table START WITH id = 1 CONNECT BY NOCYCLE PRIOR id = pid; id | name | level
例:
SELECT id、name、LEVEL FROM connect_by_table START WITH id = 1 CONNECT BY NOCYCLE PRIOR id = pid;
id | name | レベル
------ ------ ----------
1 | A | 1
101 | B1 | 2
10101 | C0 | 3
10102 | C1 | 3
102 | B2 | 2
10201 | C2 | 3
(6行)