2011-01-03 6 views
1

予想される行(従業員バッジ= 444)を返さない階層型クエリがあります。最後の行を返す階層的クエリ

TABLE:HR_DATA

badge fname supervisor_badge 
111 Jeff 222 
222 Joe 333 
333 John 444 
444 Tom 444 

SQL:

SELECT CONNECT_BY_ISCYCLE As IC, 
     badge, 
     fname, 
     supervisor_badge 
    FROM hr_data 
START WITH badge = '111' 
CONNECT BY NOCYCLE badge = PRIOR supervisor_badge 

返され何:何が期待されているか

IC badge fname supervisor_badge 
0 111 Jeff 222 
0 222 Joe 333 
1 333 John 444 

IC badge fname supervisor_badge 
0 111 Jeff 222 
0 222 Joe 333 
**0** 333 John 444 
**1** 444 Tom 444 

従業員を返すようにクエリを取得するにはどうすればいいですか?Tom

答えて

0

クエリからNOCYCLE句を削除します。

SELECT CONNECT_BY_ISCYCLE As IC, 
     badge, 
     fname, 
     supervisor_badge 
    FROM hr_data 
START WITH badge = '111' 
CONNECT BY badge = PRIOR supervisor_badge 
+0

おかげでそれを返します。java.sql.SQLException:ORA-01436:私はこの機能に慣れていないよ、ユーザーデータ – jeff

+1

にループして接続、このようなことをすることはできますか? '前のバッジによって接続する!=前のsupervisor_badgeとバッジ=前にsupervisor_badge'。また、このページ(http://www.rampant-books.com/10g_79.htm)によれば、NOCYCLE句なしでCONNECT_BY_ISCYCLEを使用することはできませんが、この場合はCONNECT_BY_ISCYCLEの使用を'(badge = supervisor_badge)' –

+0

ありがとうございました。それは動作します!残念ながら、あなたの正解はコメントだけです。 – jeff

0

は逆のアプローチを取るとツリーを下降はあなたの望ましい結果が得られますが、まだ働いてあなたのアプローチを持っていません。

SELECT CONNECT_BY_ISCYCLE As IC, 
     badge, 
     fname, 
     supervisor_badge 
    FROM (select '111' badge, 'Jeff' fname, '222' supervisor_badge from dual union all 
     select '222' badge, 'Joe' fname, '333' supervisor_badge from dual union all 
     select '333' badge, 'John' fname, '444' supervisor_badge from dual union all 
     select '444' badge, 'Tom' fname, '444' supervisor_badge from dual 
     ) 
START WITH badge = '444' 
CONNECT BY NOCYCLE PRIOR badge = supervisor_badge; 

が生成されます:ここでは反対である

IC BADGE FNAME  SUPERVISOR_BADGE 
--- ----- ---------- ------------------ 
    1 444 Tom  444 
    0 333 John  444 
    0 222 Joe  333 
    0 111 Jeff  222 
+0

私のデータは概念的なもので、実際にデータベースには約10,000人の従業員がいます。なぜFROM句でサブクエリを使用したいのか分かりません。言い換えれば、あなたの答えで伝えようとしていることを理解できません。 – jeff

+0

@jeff:サブクエリは共にありますので、私はクエリを実行するためのサンプルデータを持っています。あなたのために、それはちょうどあなたのソーステーブルになります。 –

関連する問題