2010-03-31 62 views
4

我正在浏览CONNECT BY用法的一些以前的帖子。我需要找到的是,如果我想要得到所有父母(即,根到底),只有一个孩子为一个节点,说4.如何做,说4.使用CONNECT BY通过Oracle中的SQL查询获取层次结构中的所有父项和子项

这似乎我将不得不使用联合以下两个: -

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 

有没有更好的方法来做到这一点,一些更好的解决方法?

回答

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 *,总是命名你真正需要的列。这使您的查询更易于阅读,维护和优化。

+0

当我们忽略了一些明显的东西时,它有时真的很有趣。工会部分非常明显,但我认为我太过分关注CONNECT BY子句。是的,我知道不使用SELECT *,但只是试图缩短文本。 :) 谢谢。 – 2010-03-31 08:28:08

相关问题