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

PolarDB:親子関係の定義

最終更新日:Jun 04, 2024

指定された行の親ノードと子ノードは、CONNECT by句によって決定されます。 CONNECT BY 句は、等号 (=) 演算子と比較して、2 つの式で構成する必要があります。 これら 2 つの式のいずれかは、PRIOR キーワードの前に置く必要があります。

指定した行の子ノードを決定するには、次の手順を実行します。

  1. 指定された行の parent_expr を評価します。
  2. table_expressionの評価の結果、他の行でchild_exprを評価します。
  3. parent_expr = child_expr の場合、この行は指定された親行の子ノードです。
  4. table_expression の残りのすべての行に対してこのプロセスを繰り返します。 手順 3 の方程式を満たすすべての行は、指定された親行の子ノードです。
説明 評価プロセスは、table_expression によって返されるすべての行で、行が子ノードであるかどうかをチェックします。 WHERE 句が table_expression で使用されます。

このプロセスを繰り返すことにより、前の手順で見つかった各子ノードを親と見なし、ノードの反転ツリーを構築することができます。 このプロセスは、子ノードの最終セットが子ノードを持たないときに完了する。 これらのノードはリーフノードです。

CONNECT BY 句を含む SELECT 文には、START WITH 句が含まれます。
説明 START WITH 句は、ルートノードである行を決定します。 たとえば、行は、前述のアルゴリズムが使用される最初の親ノードです。 詳細は、「ルートノードの選択」をご参照ください。

都市階層テーブルを作成します。
CREATE TABLE chinamap(id INT、parentid INT、name TEXT);
説明 idは子オブジェクトのIDを示し、parentidは親オブジェクトのIDを示し、nameは子オブジェクトの名前を示します。
データを挿入します。
  • 浙江省のデータを挿入します。
    INSERT INTO chinamap VALUES(1、NULL、'Zhejiang');
  • 浙江省の県レベルの都市のデータを挿入します。
    INSERT INTO chinamap VALUES(101、1、'Hangzhou');
    INSERT INTO chinamap VALUES(102、1、'Ningbo ');
    INSERT INTO chinamap VALUES(103、1、'Wenzhou');
    INSERT INTO chinamap VALUES(104、1、'Jiaxing');
    INSERT INTO chinamap VALUES(105、1、'Huzhou');
    INSERT INTO chinamap VALUES(106、1、'Shaoxing');
    チャイナマップ値に挿入 (107、1、'Jinhua');
    INSERT INTO chinamap VALUES(108、1、'Quzhou');
    INSERT INTO chinamap VALUES(109、1、'Zhoushan');
    INSERT INTO chinamap VALUES(110、1、'Taizhou');
    INSERT INTO chinamap VALUES(111、1、'Lishui'); 
  • 杭州地区のデータを挿入します。
    chinamap VALUES(10101、101、「Shangcheng」) に挿入します。INSERT INTO chinamap VALUES(10102、101、'Xiacheng ');
    INSERT INTO chinamap VALUES(10103、101、'Xihu');
    chinamap VALUES(10104、101、'Gongshu') に挿入します。chinamap VALUES(10105、101、「Yuhang」) に挿入します。INSERT INTO chinamap VALUES(10106、101、'Binjiang');
    chinamap VALUES(10107、101、'Jianggan') に挿入します。INSERT INTO chinamap VALUES(10108、101、'Xiaoshan'); 
都市階層を照会します。
select * from chinamap start with id = 1 connect by parentid=previous id;
同様の出力が表示されます:
id | parentid | name
------ ---------- ------------
     1 | | 浙江省
   101 | 1 | 杭州
 10101 | 101 | Shangcheng
 10102 | 101 | Xiacheng
 10103 | 101 | Xihu
 10104 | 101 | Gongshu
 10105 | 101 | Yuhang
 10106 | 101 | Binjiang
 10107 | 101 | Jianggan
 10108 | 101 | Xiaoshan
   102 | 1 | 寧波
   103 | 1 | 温州
   104 | 1 | Jiaxing
   105 | 1 | 湖州
   106 | 1 | Shaoxing
   107 | 1 | Jinhua
   108 | 1 | Quzhou
   109 | 1 | 舟山
   110 | 1 | 泰州
   111 | 1 | Lishui
(20行)