当前位置: 代码迷 >> DB2 >> db2递归查询有关问题
  详细解决方案

db2递归查询有关问题

热度:2345   发布时间:2013-02-26 00:00:00.0
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愿意和你共同讨论下!
  相关解决方案