我正在浏览一些关于CONNECT BY用法的帖子。我需要找到的是,如果我想要获得所有父母(即,最多根)和一个节点的一个孩子,例如4,该怎么办。
似乎我将不得不使用以下两者的联合: -
SELECT *
FROM hierarchy
START WITH id = 4
CONNECT BY id = PRIOR parent
union
SELECT *
FROM hierarchy
WHERE LEVEL =<2
START WITH
id = 4
CONNECT BY
parent = PRIOR id
有没有更好的方法来实现这一点,一些更优化的解决方法?
答案 0 :(得分:8)
您应该可以使用子选择(和DISTINCT
)来查找4
的所有子项:
Select Distinct *
From hierarchy
Start With id In ( Select id
From hierarchy
Where parent = 4 )
Connect By id = Prior parent
使用UNION
,您至少可以从第二个查询中删除CONNECT BY
:
Select *
From hierarchy
Start With id = 4
Connect By id = Prior parent
Union
Select *
From hierarchy
Where parent = 4
永远不要使用SELECT *
,始终为实际需要的列命名。这使您的查询更易于阅读,维护和优化。