首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > IBM DB2 >

db2递归查询有关问题

2012-11-07 
db2递归查询问题Java code数据库表如下:area_idarea_namearea_levelparent_id1辽宁省级null2吉林省级null3

db2递归查询问题

Java code
数据库表如下:area_id    area_name    area_level    parent_id1    辽宁        省级        null2    吉林        省级        null3    黑龙江        省级        null4    沈阳        市级        15    大连        市级        16    鞍山        市级        17    长春        市级        28    延边        市级        29    哈尔滨        市级        310    大庆        市级        311    佳木斯        市级        312    伊春        市级        313    瓦房店        县级        514    普兰店        县级        515    庄河        县级        516    甘井子区    区级        517    砬子山村    村级        16查询的结果如下:area_id    area_name    area_level    root1    辽宁        省级        12    吉林        省级        23    黑龙江        省级        34    沈阳        市级        15    大连        市级        16    鞍山        市级        17    长春        市级        28    延边        市级        29    哈尔滨        市级        310    大庆        市级        311    佳木斯        市级        312    伊春        市级        313    瓦房店        县级        114    普兰店        县级        115    庄河        县级        116    甘井子区    区级        117    砬子山村    村级        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愿意和你共同讨论下!

热点排行