表名:test
字段:
ID 整型,primarkey
CODE 编码
PARENT_ID 整型
说明:这个表是自循环的树形结构存储,CODE是唯一的(根据CODE可以唯一确定一行记录),如果PARENT_ID为0,就表示是树的根节点
数据如下:
ID CODE PARENT_ID
1 a 0
2 a1 1
3 a2 1
4 a11 2
5 a12 2
如上数据表示a是根节点,a下有a1和a2 这2个子节点,a1下有a11和a12 这2个子节点
求写一个sql语句,根据指定的CODE,查询出这个CODE所属的整个数结构数据。
9 个解决方案
#1
select * from test
connect by prior id=PARENT_ID
start with PARENT_ID=0
order siblings by id
#2
问题是起始点不好找啊,起始点需要根据一个给定的CODE来查找
#3
start with PARENT_ID=0
这句可以修改为这样
start with code=‘你指定的code’
这句可以修改为这样
start with code=‘你指定的code’
#4
是这样的,指定一个code,但是我要得到的是这个code所属的从根节点开始的完整的树。
#5
select * from test
connect by prior id=PARENT_ID
start with code=‘code’
--楼主可以用这个connect by循环遍历树,这个prior id = parent_id就是父节点往子节点循环。
connect by prior id=PARENT_ID
start with code=‘code’
--楼主可以用这个connect by循环遍历树,这个prior id = parent_id就是父节点往子节点循环。
#6
告诉怎么改都不行,还得把替换的结果写出来,这年头分真不好拿了
select * from test
connect by prior id=PARENT_ID
start with code='你指定的code'
order siblings by id
#7
可能我没有说清楚,如果start with code=‘指定的code’
这样查询出的结果是指定code这个节点,及其所有子节点数据
但是我要的结果是包含指定code节点的一颗完整的树,
即还要向上找,找到code的父节点、父节点的父节点、直到找到根节点。
ID CODE PARENT_ID
1 a 0
2 a1 1
3 a2 1
4 a11 2
5 a12 2
6 a21 3
举例:制定code为a2,要查找的结果为
ID CODE PARENT_ID
1 a 0
3 a2 1
6 a21 3
这样查询出的结果是指定code这个节点,及其所有子节点数据
但是我要的结果是包含指定code节点的一颗完整的树,
即还要向上找,找到code的父节点、父节点的父节点、直到找到根节点。
ID CODE PARENT_ID
1 a 0
2 a1 1
3 a2 1
4 a11 2
5 a12 2
6 a21 3
举例:制定code为a2,要查找的结果为
ID CODE PARENT_ID
1 a 0
3 a2 1
6 a21 3
#8
先反向构建树,查找根节点,在按树形查询
select * from test T
connect by prior id=PARENT_ID
start with PARENT_ID=0
and code in (select code from test connect by id=prior PARENT_ID start with code='你指定的code')
order siblings by id
#9
#1
select * from test
connect by prior id=PARENT_ID
start with PARENT_ID=0
order siblings by id
#2
问题是起始点不好找啊,起始点需要根据一个给定的CODE来查找
#3
start with PARENT_ID=0
这句可以修改为这样
start with code=‘你指定的code’
这句可以修改为这样
start with code=‘你指定的code’
#4
是这样的,指定一个code,但是我要得到的是这个code所属的从根节点开始的完整的树。
#5
select * from test
connect by prior id=PARENT_ID
start with code=‘code’
--楼主可以用这个connect by循环遍历树,这个prior id = parent_id就是父节点往子节点循环。
connect by prior id=PARENT_ID
start with code=‘code’
--楼主可以用这个connect by循环遍历树,这个prior id = parent_id就是父节点往子节点循环。
#6
告诉怎么改都不行,还得把替换的结果写出来,这年头分真不好拿了
select * from test
connect by prior id=PARENT_ID
start with code='你指定的code'
order siblings by id
#7
可能我没有说清楚,如果start with code=‘指定的code’
这样查询出的结果是指定code这个节点,及其所有子节点数据
但是我要的结果是包含指定code节点的一颗完整的树,
即还要向上找,找到code的父节点、父节点的父节点、直到找到根节点。
ID CODE PARENT_ID
1 a 0
2 a1 1
3 a2 1
4 a11 2
5 a12 2
6 a21 3
举例:制定code为a2,要查找的结果为
ID CODE PARENT_ID
1 a 0
3 a2 1
6 a21 3
这样查询出的结果是指定code这个节点,及其所有子节点数据
但是我要的结果是包含指定code节点的一颗完整的树,
即还要向上找,找到code的父节点、父节点的父节点、直到找到根节点。
ID CODE PARENT_ID
1 a 0
2 a1 1
3 a2 1
4 a11 2
5 a12 2
6 a21 3
举例:制定code为a2,要查找的结果为
ID CODE PARENT_ID
1 a 0
3 a2 1
6 a21 3
#8
先反向构建树,查找根节点,在按树形查询
select * from test T
connect by prior id=PARENT_ID
start with PARENT_ID=0
and code in (select code from test connect by id=prior PARENT_ID start with code='你指定的code')
order siblings by id