Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
oracle中的树结构查询,带有一个整型字段和一个varchar字段_Oracle_Oracle12c_Hierarchical Query - Fatal编程技术网

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

oracle中的树结构查询,带有一个整型字段和一个varchar字段,oracle,oracle12c,hierarchical-query,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_

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

但我得到了一个错误:在用户数据中通过循环连接

我认为您应该使用
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;
您也可以使用
来编辑编号
,而不是
CAST

PRIOR TO_NUMBER (wbs_id) = sub_task_id

我认为你应该使用
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;
您也可以使用
来编辑编号
,而不是
CAST

PRIOR TO_NUMBER (wbs_id) = sub_task_id

当我看到一个表,其中包含名为SUB_TASK_ID和TASK_ID的列时,我立即想到“复合键”。也就是说,我假设SUB_TASK_ID仅与TASK_ID唯一。如果是这种情况,您需要在connectby子句中包含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;

当我看到一个表,其中包含名为SUB_TASK_ID和TASK_ID的列时,我立即想到“复合键”。也就是说,我假设SUB_TASK_ID仅与TASK_ID唯一。如果是这种情况,您需要在connectby子句中包含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;

你的问题是什么?您得到的是错误还是错误的结果?请编辑您的问题以显示示例数据、预期结果以及您现在得到的结果。您面临的错误/问题是什么?还显示示例数据。错误:在用户数据中按循环连接我的wbs_id是varchar,所以树结构查询不起作用,所以我尝试转换wbs_id,它不起作用,请在(929)中选择*从art_sub_任务分配以sub_任务id开始按先前的wbs_id连接=sub_任务id;由于varchart,错误消息告诉您所谓的“树结构”不是树。在您的表中有一个循环:对于sub_task_id和wbs_id,有以下值的行:(1,2),(2,3),(3,1)(可能不是数字1,2,3,而是不同的数字,可能一个周期长于三个步骤)。您可以按照答案中的建议使用NOCYCLE;但是如果这是意外的,应该对它进行分析,如果事实上它是错误的,那么应该首先修复错误。否则就是垃圾进来,垃圾出去。你的问题是什么?您得到的是错误还是错误的结果?请编辑您的问题以显示示例数据、预期结果以及您现在得到的结果。您面临的错误/问题是什么?还显示示例数据。错误:在用户数据中按循环连接我的wbs_id是varchar,所以树结构查询不起作用,所以我尝试转换wbs_id,它不起作用,请在(929)中选择*从art_sub_任务分配以sub_任务id开始按先前的wbs_id连接=sub_任务id;由于varchart,错误消息告诉您所谓的“树结构”不是树。在您的表中有一个循环:对于sub_task_id和wbs_id,有以下值的行:(1,2),(2,3),(3,1)(可能不是数字1,2,3,而是不同的数字,可能一个周期长于三个步骤)。您可以按照答案中的建议使用NOCYCLE;但是如果这是意外的,应该对它进行分析,如果事实上它是错误的,那么应该首先修复错误。另外请注意,您可以使用
connectby\u ISCYCLE
作为列来查看循环在数据中的位置。还要注意的是,您可以使用
connectby\u ISCYCLE
作为列来查看循环在数据中的位置。