您好,登錄后才能下訂單哦!
PostgreSQL 支持遞歸查詢,可以使用 WITH RECURSIVE
語句來處理樹形結構的數據
首先,創建一個表來存儲樹形結構的數據:
CREATE TABLE tree (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
parent_id INTEGER,
FOREIGN KEY (parent_id) REFERENCES tree(id)
);
接下來,向表中插入一些示例數據:
INSERT INTO tree (name, parent_id) VALUES ('root', NULL);
INSERT INTO tree (name, parent_id) VALUES ('child1', 1);
INSERT INTO tree (name, parent_id) VALUES ('child2', 1);
INSERT INTO tree (name, parent_id) VALUES ('grandchild1', 2);
INSERT INTO tree (name, parent_id) VALUES ('grandchild2', 2);
現在,我們可以使用遞歸查詢來獲取樹形結構的數據。以下是一個查詢示例,它將返回樹形結構的所有節點及其父節點:
WITH RECURSIVE tree_hierarchy AS (
SELECT id, name, parent_id, ARRAY[id] AS path
FROM tree
WHERE parent_id IS NULL
UNION ALL
SELECT t.id, t.name, t.parent_id, th.path || t.id
FROM tree t
JOIN tree_hierarchy th ON t.parent_id = th.id
)
SELECT * FROM tree_hierarchy;
這個查詢首先從根節點(parent_id IS NULL
)開始,然后遞歸地添加子節點。ARRAY[id]
用于存儲從根節點到當前節點的路徑。
運行此查詢后,你將看到類似以下的輸出:
id | name | parent_id | path
----+----------+-----------+-----------
1 | root | | {1}
2 | child1 | 1 | {1,2}
3 | child2 | 1 | {1,3}
4 | grandchild1 | 2 | {1,2,4}
5 | grandchild2 | 2 | {1,2,5}
這樣,你就可以使用 PostgreSQL 的遞歸查詢功能來處理樹形結構的數據了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。