Oracleの階層問い合わせ(3)
(connect_by_IsLeaf,connect_by_root)
connect_by_IsLeaf,connect_by_rootを使ったOracleの階層問い合わせ3
ダウンロード SourceCode (864.0 B)
3. prior演算子
prior演算子は、主にconnect by句で使われますが、select句で使用して、親の行の値を取得するといった用途もあります。サンプルを見てみましょう。
| ID | OyaID | Name |
| 1 | null | AAAA |
| 2 | 1 | BBBB |
| 3 | 2 | CCCC |
| 4 | 1 | DDDD |
| 5 | 4 | EEEE |
| 6 | 4 | FFFF |
| 7 | 1 | GGGG |
| 10 | null | HHHH |
| 20 | null | IIII |
| 21 | 20 | JJJJ |
| 22 | 21 | KKKK |
select ID,OyaID,Name,prior Name as OyaName,Level, sys_connect_by_path(to_char(ID),',') as path from PriorT start with OyaID is null connect by prior ID = OyaID;
| ID | OyaID | Name | OyaName | Level | path |
| 1 | null | AAAA | null | 1 | ,1 |
| 2 | 1 | BBBB | AAAA | 2 | ,1,2 |
| 3 | 2 | CCCC | BBBB | 3 | ,1,2,3 |
| 4 | 1 | DDDD | AAAA | 2 | ,1,4 |
| 5 | 4 | EEEE | DDDD | 3 | ,1,4,5 |
| 6 | 4 | FFFF | DDDD | 3 | ,1,4,6 |
| 7 | 1 | GGGG | AAAA | 2 | ,1,7 |
| 10 | null | HHHH | null | 1 | ,10 |
| 20 | null | IIII | null | 1 | ,20 |
| 21 | 20 | JJJJ | IIII | 2 | ,20,21 |
| 22 | 21 | KKKK | JJJJ | 3 | ,20,21,22 |
SQLのイメージは、下記となります。木ごとに区切る赤線をイメージしてます。

最後に
今回は、connect_by_IsLeaf擬似列,connect_by_root演算子,prior演算子を扱いました。次回は、connect by nocycle,connect_by_isCycle擬似列を扱います。
参考資料
- 『Advanced Oracle SQL Programming』 Laurent Schneider 著、Rampant TechPress、2008年12月
- 『Oracle Database SQLリファレンス 10g リリース2 階層問合せ』
- 『Oracle Database SQL Reference 10g Release2 Hierarchical Queries』
この記事は参考になりましたか?
既に会員の方はを行ってください。
- Oracleの階層問い合わせ連載記事一覧
- この記事の著者
-
山岸 賢治(ヤマギシ ケンジ)
趣味が競技プログラミングなWebエンジニアで、OracleSQLパズルの運営者。AtCoderの最高レーティングは1204(水色)。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
