0

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

4

2 回答 2

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
于 2018-02-05T11:32:23.203 回答
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;
于 2018-02-06T08:30:12.593 回答