我正在浏览一些关于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
有没有更好的方法来做到这一点,一些更优化的解决方法?
解决方法
您应该能够使用子选择(和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 *,始终为实际需要的列命名.这使您的查询更易于阅读,维护和优化.