oracle 中在有层级关系的表中,往往会用到递归查询查表数据之间的关系。
递归查询中目前得知的有两种,一种是:
1. select * from table_name
start with 起始条件 where *** ------起始节点
connect by prior ***= *** -------递归条件
2. WITHT(storage_id,storage_name,parent_storage_id,storage_level,path,
top_manager) AS ( ---- 结构写出来
SELECT storage_id,storage_name, parent_storage_id,
storage_level,'\' || storage_name -- 路径拼接 ,
storage_name AS top_manager ---- 原来的CONNECT_BY_ROOT FROM
table_name WHERE parent_storage_id = 'J001' ---- 原来的START WITH条件
UNION ALL ---- 下面是递归部分
SELECT e.storage_id,e.storage_name, e.parent_storage_id, e.storage_level,
t.path || '\' || e.storage_name, ---- 把新的一截路径拼上去
t.top_manager ---- 根节点只有一个
FROM t, table_name e ---- 典型写法,把子查询本身和要遍历的表作一个连接
WHERE t.storage_id = e.parent_storage_id ---- 原来的CONNECT BY条件
) ---- WITH定义结束
SELECT * FROM T
第二种方法是在oracle 11 之后新增加的,第二种相对较灵活,查询效率待证!