MySQL是一種關系型數據庫,其SQL查詢語言支持遞歸查詢。遞歸查詢是指在查詢過程中,需要嵌套多個查詢,每個查詢都基于上一個查詢的結果進行。
遞歸查詢可以用于樹形結構數據、嵌套層級數據等場景。MySQL通過WITH RECURSIVE語法來支持遞歸查詢。
WITH RECURSIVE cte (id, parent_id, name, level) AS ( SELECT id, parent_id, name, 0 FROM categories WHERE parent_id IS NULL -- 最高層級的數據,即無 parent_id 的數據 UNION ALL SELECT categories.id, categories.parent_id, categories.name, cte.level+1 FROM categories JOIN cte ON categories.parent_id = cte.id ) SELECT id, parent_id, name, level FROM cte ORDER BY id;
以上代碼實現了對categories表中樹形結構數據的遞歸查詢。代碼中使用了WITH RECURSIVE語法,cte是遞歸查詢的臨時表,包含了查詢結果中的id、parent_id、name和level四個字段。
首先,查詢條件限定parent_id為NULL的數據,這些數據是最高層級的數據。
然后,使用UNION ALL鏈接查詢,從categories表中查詢所有parent_id等于上一級查詢的id的數據,同時level+1,直到所有滿足條件的數據都被遍歷完。
最后,從臨時表cte中選取所需字段進行查詢并按id排序。
上一篇中文css布局器