SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Oracleの階層問い合わせ

Oracleの階層問い合わせ(6)
(枝切りの入門事項)

有向グラフで訪問経路の列挙

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード SourceCode (1.2 KB)

2. 訪問経路の列挙

 次は、枝切りを使った問題を解いてみましょう。

NodeT
ID Next1 Next2 Next3
A B C null
B D G null
C D E null
D E F G
E C D F
F D E G
G B D F

 下記の有向グラフでAからDに到着する経路を求めます。ただし、同じノードへの再訪は不許可とします。

有向グラフ
有向グラフ

 答えは下記となります。Dに到着したら探索を打ち切るということで、connect by句でprior ID != 'D'を指定しています。そして、where ID = 'D'を指定して、Dまでの経路を列挙しています。

訪問経路を列挙するSQL
select Level,sys_connect_by_path(ID,',') as path
  from NodeT
 where ID = 'D'
start with ID = 'A'
connect by nocycle ID in(prior Next1,
                         prior Next2,
                         prior Next3)
       and prior ID != 'D';
出力結果
Level path
3 ,A,B,D
4 ,A,B,G,D
5 ,A,B,G,F,D
7 ,A,B,G,F,E,C,D
6 ,A,B,G,F,E,D
3 ,A,C,D
4 ,A,C,E,D
5 ,A,C,E,F,D
7 ,A,C,E,F,G,B,D
6 ,A,C,E,F,G,D

次のページ
3. 訪問経路の列挙(条件つき)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Oracleの階層問い合わせ連載記事一覧

もっと読む

この記事の著者

山岸 賢治(ヤマギシ ケンジ)

趣味が競技プログラミングなWebエンジニアで、OracleSQLパズルの運営者。AtCoderの最高レーティングは1204(水色)。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4809 2010/02/22 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング