先通过更改规则连接

时间:2016-08-30 09:53:30

标签: sql oracle hierarchical connect-by

我有一张这样的表:

dataid | parentid  |   name
----------------------------
   1   |     99    |  root 
----------------------------
   2   |     -1     | folder1 
----------------------------
   3   |     -1     | folder2 
----------------------------
   4   |    -1    |  file1 
----------------------------
   5   |     2     |  file2 

所以规则很奇怪。表中的所有项都是root的子项。当文件夹在root内部时,它的parentid为负数,当文件在root内时,它的parentid为负数。但是当文件或文件夹在文件夹indise root中时,它的parentid是正面的。

到目前为止,我已经编写了这个查询,并且它与永远的积极父母一起工作

SELECT name , CONNECT_BY_ISLEAF "IsLeaf",
   LEVEL, SYS_CONNECT_BY_PATH(dataid, '/') "Path"
   FROM TABLE
   WHERE 1=1
   START WITH dataid = 99
   CONNECT BY PRIOR dataid = abs(parentid);

所以,我设法让它使用abs工作。但这需要太多时间。是否有另一种解决方案或者我应该创建一个索引......

0 个答案:

没有答案