级联查询有很多教程示例,但是没有找到求特定子孙到根的路径的例子,折腾了一番总算想出方法了。 

 现假设我们拥有一个菜单表t_menu,其中只有三个字段:id、name和parent_id。它们是具有父子关系的,最顶级的菜单对应的parent_id为0。现假设我们拥有如下记录:

id

name

parent_id

1

菜单01

0

2

菜单02

0

3

菜单03

0

4

菜单0101

1

5

菜单0102

1

6

菜单0103

1

7

菜单010101

4

8

菜单010201

5

9

菜单010301

6

10

菜单0201

2

11

菜单0202

2

12

菜单020101

10

13

菜单020102

10

14

菜单020103

10

15

菜单0301

3

16

菜单0302

3

17

菜单030201

16

18

菜单030202

16

19

菜单030203

16

  (示例数据来自一篇不错的级联查询教程

  假设需要求菜单parentId为16的数据到菜单03的路径,用

 

 select *,sys_connect_by_path(name,'/')

  from t_menu where parent_id = 16

  start with  id is not null

  connect by  prior id = parent_id

  得出的是每个节点往下的路径。

  把prior 放在parent_id 前面,可以得出全路径,但是不好提取到根的路径。而且如果数据库很大, start with 用 is not null  会很慢。

  这里我想到一个点子

select * from t_menu t
left join (
select connect_by_root id as id ,sys_connect_by_path(name,'/') path
from t_menu
where id=3
start with (select id from t_menu where parent_id =16)
connect by id =prior parent_id) t1
on t.id=t1.id

用connect_by_root 来取出path的actul id,再和原表左联。如有更好的方法,欢迎交流

  

最新文章

  1. 【转载】WEB前端开发规范文档
  2. Android组件安全
  3. XML转换JSON的工具使用方法
  4. 为大型网站提速—redis
  5. Python压缩
  6. Objective-C 命名规范
  7. 《BI项目笔记》创建多维数据集Cube(2)
  8. codeforces 471C.MUH and House of Cards 解题报告
  9. PLSQL DEVELOPER 连接远程数据库 OCI客户端安装方法
  10. object-单例设计模式
  11. PAT 字符串-02 删除字符串中的子串
  12. CentOS下恢复Firefox的复制等功能
  13. 传输层-TCP
  14. ASP.NET MVC 5 学习教程:控制器传递数据给视图
  15. 【cocos2d-js官方文档】二十五、Cocos2d-JS v3.0中的单例对象
  16. Pat1067:Sort with Swap(0,*)
  17. [UNITY 5.4 UGUI] 模态对话框
  18. uWSGI, Gunicorn, 啥玩意儿?
  19. flutter 生命周期
  20. kubernetes高可用设计-CA,etcd

热门文章

  1. Spring scope注解
  2. hibernate 创建工厂类
  3. vs安装体验
  4. 80C51存储器与C51内存优化
  5. Beta 冲刺 四
  6. 移动硬盘插到台式机,外接网卡无法连接wifi处理
  7. C# 项目迁移 Microsoft.VisualStudio.Tools.Office.BuildTasks 生成解决方法报错:请确认 <UsingTask> 声明正确,该程序集及其所有依赖项都可用
  8. ubuntu 16.04 kdump 使用
  9. 如何解决每次打开office 都会出现正在配置的问题
  10. idea log4j 用法