在MySQL中,當遇到需要查詢樹結構(如目錄結構)的所有子節點時,我們可以使用以下方法:
WITH RECURSIVE cte AS ( SELECT id, parent_id, name FROM table_name WHERE id = 1 # 1 表示根節點的ID UNION ALL SELECT t.id, t.parent_id, t.name FROM table_name t INNER JOIN cte ON t.parent_id = cte.id ) SELECT * FROM cte;
代碼解析:
1. 使用WITH RECURSIVE定義CTE(公共表表達式)。
2. 在第一個SELECT子句中選取根節點并映射到cte表中,其實就是遞歸查詢開始的地方。
3. 在第二個SELECT子句中,我們使用INNER JOIN將cte表與原始表進行連接,以獲取所有子節點。
4. UNION ALL運算符用于將第一個子句和后續的子句組合起來構成CTE表。
5. 運行SELECT語句時,它將返回cte表中的所有行,這些行包含根節點及其所有子節點。
總體來說,上述代碼的功能就是先找到根節點,然后通過循環遞歸地查詢其子節點,直到所有子節點都被找到為止,最終返回所有的子節點。
上一篇css表格高度控制