MySQL支持使用查詢語句查詢子節點。如果你需要查詢樹形結構中每個節點的所有子節點,那么你可以使用MySQL的遞歸查詢功能來實現。
下面是一個示例表結構,它用于存儲組織結構:
CREATE TABLE organizations ( id INT PRIMARY KEY, name VARCHAR(50), parent_id INT, FOREIGN KEY (parent_id) REFERENCES organizations(id) );
假設我們的組織結構是以下這樣的:
1. 公司A 2. 部門A1 3. 小組A1-1 4. 小組A1-2 5. 部門A2 6. 小組A2-1 7. 公司B
如果需要查詢“部門A1”下的所有子節點,可以使用以下查詢語句:
WITH RECURSIVE cte AS ( SELECT id, parent_id, name FROM organizations WHERE id = 2 -- 部門A1的ID UNION ALL SELECT o.id, o.parent_id, o.name FROM organizations o INNER JOIN cte ON cte.id = o.parent_id ) SELECT * FROM cte;
這個查詢語句使用了MySQL的遞歸查詢功能,其中cte
是一個遞歸查詢表(又稱 "公共表表達式")。在第一次查詢時,會獲取 id=2 的組織(即“部門A1”),并將其作為初始行添加到cte
表中。然后,查詢會重復執行,直到沒有新的子節點可以添加為止。這是通過遞歸加入每個子節點實現的。
執行上述查詢語句后,輸出結果如下:
+----+-----------+-----------+ | id | parent_id | name | +----+-----------+-----------+ | 2 | 1 | 部門A1 | | 3 | 2 | 小組A1-1 | | 4 | 2 | 小組A1-2 | +----+-----------+-----------+
如此,我們就可以查詢到“部門A1”下的所有子節點了。