SQL递归示例

时间:2014-04-21 06:45:43

标签: sql recursion

我想使用包含父节点和子节点的相同表来加载动态菜单。 表结构:

COMPID | ParentID | MenuName
----------------------------
1      | 1        | Menu 1
2      | 2        | Menu 2
3      | 1        | Menu 3 of Child 1
4      | 1        | Menu 4 of Child 1
5      | 4        | Menu 5 of Child 4 of Child 1

可能有一种以上的技术。但我需要知道是否可以使用recursion动态加载它? 如果是,那么让我举个例子。

1 个答案:

答案 0 :(得分:2)

ANSI SQL支持使用公用表表达式的递归查询。

以下使用ANSI SQL检索每个菜单项的完整路径:

with recursive menu_tree as (
  select compid, parentid, menuname, menuname as menu_path
  from menus
  where compid = parentid -- the root nodes
  union all
  select c.compid, c.parentid, c.menuname, p.menu_path||'/'||c.menuname 
  from menus c
    join menu_tree p 
     on c.parentid = p.compid
    and c.parentid <> c.compid
)
select compid, menu_path
from menu_tree;

SQLFiddle示例:http://sqlfiddle.com/#!15/fbfba/1