在 SQL 中遞歸查詢父節點通常使用遞歸查詢語句來實現,其中使用了遞歸關鍵字 WITH RECURSIVE
。下面是一個示例:
假設有一個表 employees
,其中包含員工的 ID 和上級員工的 ID,結構如下:
CREATE TABLE employees (
id INT,
name VARCHAR(50),
manager_id INT
);
INSERT INTO employees (id, name, manager_id) VALUES
(1, 'Alice', NULL),
(2, 'Bob', 1),
(3, 'Charlie', 2),
(4, 'David', 2),
(5, 'Eve', 1);
現在我們要查詢員工 ‘David’ 的所有上級,可以使用遞歸查詢語句如下:
WITH RECURSIVE cte AS (
SELECT id, name, manager_id
FROM employees
WHERE name = 'David'
UNION ALL
SELECT e.id, e.name, e.manager_id
FROM employees e
JOIN cte ON e.id = cte.manager_id
)
SELECT id, name
FROM cte;
上面的查詢語句中,WITH RECURSIVE
創建了一個遞歸的公共表表達式(CTE),在第一部分中選擇了員工 ‘David’ 的記錄,然后在第二部分中通過遞歸的方式聯接上級員工,直到找到最頂層的員工。最后在主查詢中選擇了所有上級員工的 ID 和姓名。
這樣就可以實現在 SQL 中遞歸查詢父節點的功能。