SQL 递归查询:获取菜单中文状态拼接结果
假设主表为 table1,菜单表为 menu,需要查询的字段为 field1,菜单表中的 id 为 menu_id,父级菜单为 parent_id,中文状态为 status。
可以使用递归查询来实现该需求。具体步骤如下:
-
先查询出 field1 对应的 menu_id。
SELECT menu_id FROM menu WHERE field1 = 'xxx'; -
通过递归查询,找到所有父级菜单,直到 parent_id=0。
WITH RECURSIVE cte AS ( SELECT menu_id, parent_id, status FROM menu WHERE menu_id = <menu_id> UNION ALL SELECT m.menu_id, m.parent_id, m.status FROM menu m JOIN cte ON m.menu_id = cte.parent_id ) SELECT status FROM cte WHERE parent_id = 0; -
将查询到的中文状态拼接起来返回。
SELECT GROUP_CONCAT(status) FROM ( WITH RECURSIVE cte AS ( SELECT menu_id, parent_id, status FROM menu WHERE menu_id = <menu_id> UNION ALL SELECT m.menu_id, m.parent_id, m.status FROM menu m JOIN cte ON m.menu_id = cte.parent_id ) SELECT status FROM cte WHERE parent_id = 0 ) AS t;
原文地址: https://www.cveoy.top/t/topic/nyfz 著作权归作者所有。请勿转载和采集!