假设主表为 table1,菜单表为 menu,需要查询的字段为 field1,菜单表中的 id 为 menu_id,父级菜单为 parent_id,中文状态为 status。

可以使用递归查询来实现该需求。具体步骤如下:

  1. 先查询出 field1 对应的 menu_id。

    SELECT menu_id FROM menu WHERE field1 = 'xxx';
    
  2. 通过递归查询,找到所有父级菜单,直到 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;
    
  3. 将查询到的中文状态拼接起来返回。

    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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录