这里我需要树结构查询,其中一个是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循环
答案 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;