oracle中的树结构查询,带有一个整数字段和varchar字段

时间:2018-02-05 11:23:18

标签: oracle oracle12c hierarchical-query

这里我需要树结构查询,其中一个是int,另一个是varchar字段。我不想将varchar修改为int。

表格结构:

ID  INT
SUB_TASK_ID INT
TASK_ID INT
PID INT
WBS_ID  VARCHAR
WBS_TYPE VARCHAR

我在这里尝试施放wbs_id

SELECT * 
from art_sub_task_allocation 
START WITH sub_task_id IN (929) 
CONNECT BY PRIOR  CAST(wbs_id AS Numeric(10,0)) = sub_task_id;

但是我收到错误:用户数据中的CONNECT BY循环

2 个答案:

答案 0 :(得分:2)

我认为你应该使用NOCYCLE

SELECT *
      FROM art_sub_task_allocation
START WITH sub_task_id IN (929)
CONNECT BY NOCYCLE PRIOR CAST (wbs_id AS NUMERIC (10, 0)) = sub_task_id;

您也可以使用TO_NUMBER代替CAST

PRIOR TO_NUMBER (wbs_id) = sub_task_id

答案 1 :(得分:0)

当我看到一个名为SUB_TASK_ID和TASK_ID的列的表时,我立即想到“复合键”。那就是我认为SUB_TASK_ID只对TASK_ID唯一。如果是这种情况,则需要在CONNECT BY子句中包含TASK_ID。

SELECT * 
from art_sub_task_allocation 
START WITH sub_task_id IN (929) 
CONNECT BY PRIOR  CAST(wbs_id AS Numeric(10,0)) = sub_task_id
      AND PRIOR TASK_ID = TASK_ID;