我有一张这样的表:
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工作。但这需要太多时间。是否有另一种解决方案或者我应该创建一个索引......