毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 数据库 >> 正文

db2递归查询语句怎么写

更新时间:2012-11-13:  来源:毕业论文

数据库表如下: area_id area_name   area_level  parent_id 1   辽宁      省级      null2   吉林      省级      null3   黑龙江     省级      null  4   沈阳      市级      15   大连      市级      16   鞍山      市级      17   长春      市级      28   延边      市级      29   哈尔滨     市级      310  大庆      市级      311  佳木斯     市级      312  伊春      市级      313  瓦房店     县级      514  普兰店     县级      515  庄河      县级      516  甘井子区    区级      517  砬子山村    村级      16  查询的结果如下: area_id area_name   area_level  root 1   辽宁      省级      12   吉林      省级      23   黑龙江     省级      3  4   沈阳      市级      15   大连      市级      16   鞍山      市级      17   长春      市级      28   延边      市级      29   哈尔滨     市级      310  大庆      市级      311  佳木斯     市级      312  伊春      市级      313  瓦房店     县级      114  普兰店     县级      115  庄河      县级      116  甘井子区    区级      117  砬子山村    村级      1

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

我觉得可以创建一个自定义函数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 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

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。