欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

db2递归查询有关问题

更新时间: 2014-01-05 02:24:21 责任编辑: Author_N1

 

db2递归查询问题
Java code

数据库表如下:
area_id    area_name    area_level    parent_id
1    辽宁        省级        null
2    吉林        省级        null
3    黑龙江        省级        null

4    沈阳        市级        1
5    大连        市级        1
6    鞍山        市级        1
7    长春        市级        2
8    延边        市级        2
9    哈尔滨        市级        3
10    大庆        市级        3
11    佳木斯        市级        3
12    伊春        市级        3
13    瓦房店        县级        5
14    普兰店        县级        5
15    庄河        县级        5
16    甘井子区    区级        5
17    砬子山村    村级        16

查询的结果如下:
area_id    area_name    area_level    root
1    辽宁        省级        1
2    吉林        省级        2
3    黑龙江        省级        3

4    沈阳        市级        1
5    大连        市级        1
6    鞍山        市级        1
7    长春        市级        2
8    延边        市级        2
9    哈尔滨        市级        3
10    大庆        市级        3
11    佳木斯        市级        3
12    伊春        市级        3
13    瓦房店        县级        1
14    普兰店        县级        1
15    庄河        县级        1
16    甘井子区    区级        1
17    砬子山村    村级        1


请问这个查询应该如何实现?
地区的深度未知
想了好久也搞不定~
谢谢

--参考方法--
mark,我也想知道。
--参考方法--
我觉得可以创建一个自定义函数root(parent_id,area_id),
root(in parent_id as int,in area_id as int)
declare v_parent_id int;
declare v_count int;
declare v_area_id int;
if parent_id is null then 
return area_id;
end if;
if parent_id is not null then
select count(1) into v_count from tablename where area_id=parent_id;
if v_count>0 then
select parent_id,area_id into v_parent_id,v_area_id where area_id=parent_id;
return root(v_parent_id,v_area_id);
else
return area_id;
end if;
end if;


然后再进行查询:
select area_id,area_name,area_level,root(parent_id,area_id) as root from tablename
order by area_id


--参考方法--
学习了 进行查询
--参考方法--
用with语句,具体的再股沟一下吧。
--参考方法--
SQL code
WITH TMP(ID,NAME,LEVEL,PARENT) AS (
SELECT AREA_ID,AREA_NAME,AREA_LEVEL,COALESCE(PARENT_ID,AREA_ID,PARENT_ID) FROM DB2ADMIN.PROVINCECITY WHERE PARENT_ID IS NULL 
UNION ALL 
SELECT AREA_ID,AREA_NAME,AREA_LEVEL,PARENT_ID FROM TMP T,DB2ADMIN.PROVINCECITY P WHERE P.PARENT_ID=T.ID 
) 
SELECT * FROM TMP

--参考方法--
兄弟,递归查询多半要用存储过程了,不知道你是哪个数据库?你的表结构说下,还有字段的之间的关系,层级之间的关系。我qq是525364686愿意和你共同讨论下!
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:24:21
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/9455/
本文WWW.DOC100.NET DOC100.NET版权所有。