すべてのプロダクト
Search
ドキュメントセンター

PolarDB:階層クエリ疑似列

最終更新日:Jun 13, 2024

このトピックでは、階層クエリ疑似列について説明します。

階層クエリ疑似列は、階層クエリでのみ有効です。 クエリで階層関係を定義するには、CONNECT BY句を使用する必要があります。 階層クエリの疑似列は次のとおりです。

  • CONNECT_BY_ISCYCLE

  • CONNECT_BY_ISLEAF

  • レベル

CONNECT_BY_ISCYCLE

CONNECT_BY_ISCYCLE疑似列の値は、行が階層内のループの開始位置であるかどうかを示します。

現在のノードにその祖先でもある子がある場合、CONNECT_BY_ISCYCLE疑似列は1を返します。 それ以外の場合は0を返す。

次の図では、ノードB1がループの開始位置です。 それは、その祖先でもある子ノードC2を有する。 You must specify <g id=

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名の<bx id=、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 image.png

例:

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行)