oracle递归实现查找整个层级关系

一个地区表,有ID,NAME,PARENTID,如何递归查找出这样的结构:省份ID,省份名称,城市ID,城市名称,区县ID,区县名称递归的起始条件是PARENTIDisn... 一个地区表,有ID,NAME,PARENTID,如何递归查找出这样的结构:省份ID,省份名称,城市ID,城市名称,区县ID,区县名称
递归的起始条件是PARENTID is null
展开
 我来答
百度网友4150a8c
推荐于2017-11-26 · TA获得超过2018个赞
知道小有建树答主
回答量:629
采纳率:25%
帮助的人:316万
展开全部
SELECT *
FROM TEST_A A
START WITH COALESCE(A.PARENTID,0) = 0
CONNECT BY PRIOR A.ID = A.PARENTID
ORDER BY A.PARENTID;

没有进行测试,你自己执行下看看是不是你想要的结果,希望能帮到你。
更多追问追答
追问
你这样写能得到我想要的那些字段吗?之前表示这样存的:

ID NAME PARENTID
1 四川省
10 成都市 1
11 绵阳市 1
100 金牛区 10

我现在想要这样的结果
1 四川省 成都市 10 金牛区 100
1 四川省 绵阳市 11
追答

CREATE TABLE TEST_A(ID NUMBER,CSNAME VARCHAR2(200),PARENTID NUMBER);

INSERT INTO TEST_A(ID ,CSNAME ,PARENTID)
VALUES(1,'四川省',NULL);
INSERT INTO TEST_A(ID ,CSNAME ,PARENTID)
VALUES(10,'成都市',1);
INSERT INTO TEST_A(ID ,CSNAME ,PARENTID)
VALUES(11,'绵阳市',1);
INSERT INTO TEST_A(ID ,CSNAME ,PARENTID)
VALUES(100,'金牛区',10);
COMMIT;

 

WITH TEST_B AS (SELECT ID,RPAD(ID,3) || ' ' || CSNAME CSN,PARENTID,LEVEL LVL
                FROM TEST_A A
                 CONNECT BY PRIOR A.ID = A.PARENTID
                START WITH A.PARENTID IS NULL
                )
SELECT CASE WHEN C.LVL = 1 THEN A.CSN
            WHEN C.LVL = 2 THEN A.CSN || ' ' || C.CSN
            ELSE A.CSN || ' ' || B.CSN || ' ' || C.CSN
       END
FROM TEST_B A
LEFT JOIN TEST_B B
      ON A.ID = B.PARENTID
LEFT JOIN TEST_B C
      ON B.ID = C.PARENTID
WHERE A.PARENTID IS NULL;

 

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式