2017-08-24 74 views
0

私は、ID列、ID_child列、および複数のファクト・フィールドを含むoracle表を持っています。私はIDを知っていて、そのトップレベルの親を探したい。私が知っているIDはID_childフィールドに入れられ、そのIDはその親になります。 このクエリは機能しましたが、通常のSQLクエリでは1行しか取得できません。 トップIDはどのように入手できますか?私が手oracle sql問合せ階層問合せ最上位レベルを検索する

SELECT 
item_tbl.id, item_tbl.id_child 
FROM item_tbl 
START WITH item_tbl.id_child = 12510646 
CONNECT BY PRIOR item_tbl.id_child = item_tbl.id 

結果:たとえば

ID    ID_CHILD 
12512162   12510646 
+0

connect by文を逆にします。あなたは次のようにします: 'CONNECT BY PRIOR item_tbl.id_child = item_tbl.id'これを' CONNECT BY PRIOR = item_tbl.id = item_tbl.id_child'に変更します。注文事項!レベルを降順で並べ替えることで、レベルを追加し、親から子への参照や、接続先の他のメソッドを使用してパスを表示することができます。 – xQbert

+0

それは働いた**私はそれを逆転し、今私はトップに各レベルを取得します。 –

答えて

0

:事項によって接続の 注文。親は左側にいる必要があります。

With item_tbl (ID, ID_CHILD) as 
(SELECT 1,2 from dual UNION ALL 
SELECT 2,3 from dual UNION ALL 
SELECT 3,4 from dual) 
SELECT 
item_tbl.id, item_tbl.id_child, level 
FROM item_tbl 
START WITH item_tbl.id_child = 4 
CONNECT BY PRIOR item_tbl.id= item_tbl.id_child 
Order by level desc; 
+0

ご協力いただきありがとうございます。私は最終的に私が働いた、または理解した結果を与える階層的なクエリを得ました。 –

0

どのように私はトップIDを得るのですか?それはCONNECT BY句で用語を交換してみてください、その後に動作しない場合は

SELECT id, id_child 
FROM item_tbl 
WHERE CONNECT_BY_ISLEAF = 1 
START WITH id_child = 12510646 
CONNECT BY PRIOR id = id_child 

:あなたはCONNECT_BY_ISLEAF疑似を使用することができます