在MySQL中,如果我們需要根據子節點來查詢其對應的父節點,可以使用以下的方法:
WITH RECURSIVE cte (id, parent_id, name) 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 cte.parent_id = t.id ) SELECT * FROM cte;
以上的查詢語句中,我們使用了MySQL的遞歸查詢功能(RECURSIVE)來實現樹形結構的查詢。首先,我們通過指定一個初始的子節點id來從原表中選擇該節點的所有信息作為遞歸查詢的第一次結果集:
SELECT id, parent_id, name FROM table_name WHERE id = 1
接著,我們在該結果集的基礎上,使用UNION ALL關鍵字將它與一個內連接查詢得到的子節點的信息合并起來,即:
SELECT t.id, t.parent_id, t.name FROM table_name t INNER JOIN cte ON cte.parent_id = t.id
該內連接查詢的作用是,從原表中選擇所有父節點的信息,然后和當前遞歸查詢到的子節點進行比較,如果子節點的parent_id和父節點的id相等,則將其展開。這個過程將一直重復下去,直到沒有更多的子節點可以展開為止。
最后,我們使用SELECT * FROM cte語句來顯示遞歸查詢的結果集,其中cte為遞歸查詢的結果集的別名。
上一篇css+div 布局