Oracleで再帰照会を使用してすべての子ノードを照会する方法

Oracleでは、結合クエリや再帰副問合せを使用してすべての孫ノードに再帰的にクエリをかけることができます。以下は、再帰副問合せを使用した例です。

  1. 従業員のIDと上司のIDのフィールドを含むemployee表などのテーブルを作成します。
CREATE TABLE employee (
    id NUMBER,
    parent_id NUMBER
);
  1. サンプルのデータを入力する
INSERT INTO employee (id, parent_id)
VALUES (1, NULL);

INSERT INTO employee (id, parent_id)
VALUES (2, 1);

INSERT INTO employee (id, parent_id)
VALUES (3, 1);

INSERT INTO employee (id, parent_id)
VALUES (4, 2);
  1. 再帰サブクエリを使用して、すべての子ノードを照会します。
WITH recursive_query (id, parent_id) AS (
    SELECT id, parent_id FROM employee WHERE id = 1 -- 指定根节点的id
    UNION ALL
    SELECT e.id, e.parent_id FROM employee e
    JOIN recursive_query r ON e.parent_id = r.id
)
SELECT * FROM recursive_query;

上記例では、再帰副問い合わせを使用して「employee」テーブルのIDが1のノードのすべての子ノードを照会しています。再帰副問い合わせ部分は、2つのSELECT文をUNION ALLで連結しています。最初のSELECT文は指定したIDのノードを返し、2番目のSELECT文はJOINを使用して再帰的に問い合わせた結果と元のテーブルとを接続することで、再帰的な問い合わせを実現しています。

bannerAds