MySQL是一種關系型數據庫管理系統,廣泛應用于各種場景。在一些業務場景中,我們需要查詢某個節點下的所有子節點,這就需要使用上下級關系遞歸查詢。下面我們來介紹如何在MySQL中完成上下級關系遞歸查詢。
# 創建測試表 CREATE TABLE test ( id INT PRIMARY KEY, parent_id INT, name VARCHAR(255) ); # 插入測試數據 INSERT INTO test (id, parent_id, name) VALUES (1, NULL, 'A'), (2, 1, 'B'), (3, 2, 'C'), (4, 3, 'D'), (5, NULL, 'E'), (6, 5, 'F'), (7, 6, 'G');
上面的代碼是創建了一個測試表,并插入了一些測試數據,其中id是節點的唯一標識,parent_id是父節點的id,name是節點的名稱。
WITH RECURSIVE cte (id, parent_id, name) AS ( SELECT id, parent_id, name FROM test WHERE id = 1 -- 查詢根節點 UNION ALL SELECT child.id, child.parent_id, child.name FROM test AS child JOIN cte AS parent ON child.parent_id = parent.id ) SELECT * FROM cte;
上面的代碼是使用MySQL的遞歸查詢語法完成了上下級關系的查詢。使用WITH RECURSIVE關鍵字創建一個臨時表cte(common table expression),并指定初始查詢條件。然后使用UNION ALL將下一級節點的數據與當前節點的數據合并,并繼續遞歸查詢,直到查詢到沒有子節點為止。
最終的查詢結果為:
id parent_id name 1 NULL A 2 1 B 3 2 C 4 3 D