db2递归查询问题

dunerunner 2012-06-25 08:26:30

数据库表如下:
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

请问这个查询应该如何实现?
地区的深度未知
想了好久也搞不定~
谢谢
...全文
437 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cometing 2012-10-10
  • 打赏
  • 举报
回复
DB2的with递归很好用,自己百度之,我就不献丑了。
long95wang 2012-09-21
  • 打赏
  • 举报
回复
兄弟,递归查询多半要用存储过程了,不知道你是哪个数据库?你的表结构说下,还有字段的之间的关系,层级之间的关系。我qq是525364686愿意和你共同讨论下!
mysdzlt2007 2012-09-19
  • 打赏
  • 举报
回复
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
westken 2012-07-13
  • 打赏
  • 举报
回复
用with语句,具体的再股沟一下吧。
sword_wu 2012-07-09
  • 打赏
  • 举报
回复
我觉得可以创建一个自定义函数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

tzx2004100 2012-07-09
  • 打赏
  • 举报
回复
学习了 进行查询
mikithebest 2012-06-28
  • 打赏
  • 举报
回复
mark,我也想知道。
dunerunner 2012-06-27
  • 打赏
  • 举报
回复
没人知道么 顶一下~
dunerunner 2012-06-25
  • 打赏
  • 举报
回复
小弟没分了 就剩20分了……全部奉上~~谢谢~

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧