- 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愿意和你共同讨论下!